<?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>160989</bug_id>
          
          <creation_ts>2016-08-18 18:48:47 -0700</creation_ts>
          <short_desc>Make JSMap and JSSet faster</short_desc>
          <delta_ts>2016-10-28 06:55:01 -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>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>161268</dependson>
    
    <dependson>161645</dependson>
    
    <dependson>164128</dependson>
          <blocked>161744</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1221287</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-18 18:48:47 -0700</bug_when>
    <thetext>Currently, I&apos;m considering writing the whole thing in JS.
In my WIP, my map, with 10,000,000 entries with JSObject keys, is about 
- 60% slower to construct than the current implementation
- 2x faster to do lookups

(I&apos;m currently implementing iteration to see what the perf difference is there).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221317</commentid>
    <comment_count>1</comment_count>
      <attachid>286435</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-18 20:58:15 -0700</bug_when>
    <thetext>Created attachment 286435
WIP

Still pretty rough, and there exist some bugs with iteration while mutating the map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221587</commentid>
    <comment_count>2</comment_count>
      <attachid>286517</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-19 19:27:06 -0700</bug_when>
    <thetext>Created attachment 286517
WIP

Still rough. About 1% faster on ES6 sample bench, which isn&apos;t much.
But I&apos;m just getting started on actually optimizing the hash table and
the various JS operations it uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1221798</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-21 20:30:18 -0700</bug_when>
    <thetext>Ok, so the patch that&apos;s up here as a WIP is actually about 8%
faster on Basic, but neutral on Air. I&apos;m going to continue
trying to optimize it but there is a chance I&apos;ll just write
the same style of hash table in C++ and make get/has/etc an
intrinsic. I&apos;ll see if we end up spending meaningful time
in parts of the function that would benefit from being in C++
and then inlined as an intrinsic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222442</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-23 15:00:15 -0700</bug_when>
    <thetext>So this is a progression for Map related things, however,
I&apos;m too tempted to write the hash table in C++ with an intrinsic
for Get/Has/etc to not try doing that. I suspect this might
give us another few percent in perf improvement.

I&apos;m working on a few other patches ATM, then I&apos;ll get back to this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222963</commentid>
    <comment_count>5</comment_count>
      <attachid>286940</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-24 20:43:38 -0700</bug_when>
    <thetext>Created attachment 286940
WIP

Starting to have a hashmap that works in C.
I still need to figure out a deallocation story for buckets when they&apos;re neither referenced by each other or by an iterator.
I&apos;ll probably start with ref counting.

Also, I think I have an implementation that works in the DFG with CSE for Map.get, but still need to emit
lowering code for various DFG nodes in FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222975</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-24 21:56:08 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created attachment 286940 [details]
&gt; WIP
&gt; 
&gt; Starting to have a hashmap that works in C.
&gt; I still need to figure out a deallocation story for buckets when they&apos;re
&gt; neither referenced by each other or by an iterator.
&gt; I&apos;ll probably start with ref counting.

Please make them GC cells!

This will mean:
- No destructor or finalizer on JSMap.
- Really fast allocation.  The GC can allocate faster than bmalloc, last I checked.
- No barrier when assigning buckets.
- No problem dealing with cycles if you want doubly-linked lists.

On the other hand, I can&apos;t really think of concrete benefits of ref counting buckets.

&gt; 
&gt; Also, I think I have an implementation that works in the DFG with CSE for
&gt; Map.get, but still need to emit
&gt; lowering code for various DFG nodes in FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1222984</commentid>
    <comment_count>7</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-24 22:57:33 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Created attachment 286940 [details]
&gt; &gt; WIP
&gt; &gt; 
&gt; &gt; Starting to have a hashmap that works in C.
&gt; &gt; I still need to figure out a deallocation story for buckets when they&apos;re
&gt; &gt; neither referenced by each other or by an iterator.
&gt; &gt; I&apos;ll probably start with ref counting.
&gt; 
&gt; Please make them GC cells!
&gt; 
&gt; This will mean:
&gt; - No destructor or finalizer on JSMap.
How can I avoid having a destructor if I want to allocate
a slab of memory to hold pointers to buckets? I guess I
could make the slab itself a GC object, but that seems
somewhat weird. Maybe you had something in mind or have
a better idea?

&gt; - Really fast allocation.  The GC can allocate faster than bmalloc, last I
&gt; checked.
&gt; - No barrier when assigning buckets.
&gt; - No problem dealing with cycles if you want doubly-linked lists.
&gt; 
&gt; On the other hand, I can&apos;t really think of concrete benefits of ref counting
&gt; buckets.
&gt; 
&gt; &gt; 
&gt; &gt; Also, I think I have an implementation that works in the DFG with CSE for
&gt; &gt; Map.get, but still need to emit
&gt; &gt; lowering code for various DFG nodes in FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223016</commentid>
    <comment_count>8</comment_count>
      <attachid>286953</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-25 02:37:11 -0700</bug_when>
    <thetext>Created attachment 286953
WIP

I think it works in the FTL now.

CSE for hashing and hash table bucket lookups works for code like:
function foo(map, key) {
    if (map.has(key))
        return map.get(key);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223098</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-08-25 10:01:06 -0700</bug_when>
    <thetext>&gt; How can I avoid having a destructor if I want to allocate
&gt; a slab of memory to hold pointers to buckets? I guess I
&gt; could make the slab itself a GC object, but that seems
&gt; somewhat weird.

Yes, I think that&apos;s the suggestion -- similar to JSArray and JSObject butterflies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223376</commentid>
    <comment_count>10</comment_count>
      <attachid>287064</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-25 19:18:21 -0700</bug_when>
    <thetext>Created attachment 287064
WIP

More is done now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223385</commentid>
    <comment_count>11</comment_count>
      <attachid>287064</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 20:00:20 -0700</bug_when>
    <thetext>Comment on attachment 287064
WIP

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

&gt; Source/JavaScriptCore/runtime/JSMap.h:35
&gt; +class HashMapBucket : public JSNonFinalObject {

Why not subclass JSCell?  That shaves off one word.

&gt; Source/JavaScriptCore/runtime/JSMap.h:80
&gt; +class HashMapBuffer : public JSNonFinalObject {

Subclass JSCell.

Even better: make the HashMapBuffer a copied-space storage object, like how butterflies, &quot;fast&quot; typed arrays, and the old map&apos;s storage work.  In tip-of-tree, copied-space storage allocation is the fastest way to allocate variable-sized stuff.  It even has in-place resizing!

&gt; Source/JavaScriptCore/runtime/JSMap.h:170
&gt; +class HashMapImpl : public JSNonFinalObject {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223386</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-25 20:01:45 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; Created attachment 286940 [details]
&gt; &gt; &gt; WIP
&gt; &gt; &gt; 
&gt; &gt; &gt; Starting to have a hashmap that works in C.
&gt; &gt; &gt; I still need to figure out a deallocation story for buckets when they&apos;re
&gt; &gt; &gt; neither referenced by each other or by an iterator.
&gt; &gt; &gt; I&apos;ll probably start with ref counting.
&gt; &gt; 
&gt; &gt; Please make them GC cells!
&gt; &gt; 
&gt; &gt; This will mean:
&gt; &gt; - No destructor or finalizer on JSMap.
&gt; How can I avoid having a destructor if I want to allocate
&gt; a slab of memory to hold pointers to buckets? I guess I
&gt; could make the slab itself a GC object, but that seems
&gt; somewhat weird. Maybe you had something in mind or have
&gt; a better idea?

I think it makes more sense if you make it a copied space storage allocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223687</commentid>
    <comment_count>13</comment_count>
      <attachid>287143</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-26 13:54:14 -0700</bug_when>
    <thetext>Created attachment 287143
WIP

Took into account Fil&apos;s suggestions. Now it&apos;s just time to start cleaning things up and make a Set::set intrinsic.
I also need to take into account the delete count in the HashMap&apos;s load factor and also allow for rehashing to make the
backing store smaller. Also, I need to make sure my patch is spec compliant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223880</commentid>
    <comment_count>14</comment_count>
      <attachid>287143</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2016-08-26 23:15:31 -0700</bug_when>
    <thetext>Comment on attachment 287143
WIP

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

&gt; Source/JavaScriptCore/runtime/JSMap.h:239
&gt; +            index = (index + 1) &amp; mask;

If I am not wrong, this logic here is to optimize (index + 1) % m_capacity, right? If yes, We need to assert in any place that  m_capacity is always a power of 2, otherwise this key collision solution can break. Imagine case where m_capacity is 7 (111b) and index is 0 (000b). So, mask is 6 (110b) and (index + 1) &amp; mask =&gt; (001b) &amp; (110b) = (000b). It is going to loop forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223881</commentid>
    <comment_count>15</comment_count>
      <attachid>287143</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2016-08-26 23:15:45 -0700</bug_when>
    <thetext>Comment on attachment 287143
WIP

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

&gt; Source/JavaScriptCore/runtime/JSMap.h:239
&gt; +            index = (index + 1) &amp; mask;

If I am not wrong, this logic here is to optimize (index + 1) % m_capacity, right? If yes, We need to assert in any place that  m_capacity is always a power of 2, otherwise this key collision solution can break. Imagine case where m_capacity is 7 (111b) and index is 0 (000b). So, mask is 6 (110b) and (index + 1) &amp; mask =&gt; (001b) &amp; (110b) = (000b). It is going to loop forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223882</commentid>
    <comment_count>16</comment_count>
      <attachid>287143</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2016-08-26 23:16:00 -0700</bug_when>
    <thetext>Comment on attachment 287143
WIP

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

&gt; Source/JavaScriptCore/runtime/JSMap.h:239
&gt; +            index = (index + 1) &amp; mask;

If I am not wrong, this logic here is to optimize (index + 1) % m_capacity, right? If yes, We need to assert in any place that  m_capacity is always a power of 2, otherwise this key collision solution can break. Imagine case where m_capacity is 7 (111b) and index is 0 (000b). So, mask is 6 (110b) and (index + 1) &amp; mask =&gt; (001b) &amp; (110b) = (000b). It is going to loop forever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1223934</commentid>
    <comment_count>17</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-27 13:27:22 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 287143 [details]
&gt; WIP
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=287143&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/JSMap.h:239
&gt; &gt; +            index = (index + 1) &amp; mask;
&gt; 
&gt; If I am not wrong, this logic here is to optimize (index + 1) % m_capacity,
&gt; right? If yes, We need to assert in any place that  m_capacity is always a
&gt; power of 2, otherwise this key collision solution can break. Imagine case
&gt; where m_capacity is 7 (111b) and index is 0 (000b). So, mask is 6 (110b) and
&gt; (index + 1) &amp; mask =&gt; (001b) &amp; (110b) = (000b). It is going to loop forever.

Yea we always keep m_capacity as a power of two. This is just done
now without assertions. I&apos;ll add assertions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224495</commentid>
    <comment_count>18</comment_count>
      <attachid>287367</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-29 20:40:58 -0700</bug_when>
    <thetext>Created attachment 287367
WIP

WIP, currently I&apos;m sharing an IR node for bot Map.has and Set.has, I need to think if this is sound or not.
I think iteration also may work now w.r.t being spec compliant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224501</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-08-29 21:02:45 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created attachment 287367 [details]
&gt; WIP
&gt; 
&gt; WIP, currently I&apos;m sharing an IR node for bot Map.has and Set.has, I need to
&gt; think if this is sound or not.

It feels right if it&apos;s like Has(Set:) and Has(Map:), as in, you&apos;re using UseKinds for overloading. That&apos;s how UseKinds are meant to be used. 

&gt; I think iteration also may work now w.r.t being spec compliant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224813</commentid>
    <comment_count>20</comment_count>
      <attachid>287466</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-30 17:34:53 -0700</bug_when>
    <thetext>Created attachment 287466
WIP

I think I&apos;m almost done, just need to clean up the code and go over all of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224845</commentid>
    <comment_count>21</comment_count>
      <attachid>287475</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-30 20:31:22 -0700</bug_when>
    <thetext>Created attachment 287475
WIP

more cleanup. Getting close. I need to make 32-bit work too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225235</commentid>
    <comment_count>22</comment_count>
      <attachid>287592</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-08-31 20:52:54 -0700</bug_when>
    <thetext>Created attachment 287592
WIP

just stashing this diff here. I still need to write 32-bit implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225549</commentid>
    <comment_count>23</comment_count>
      <attachid>287687</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-01 15:00:12 -0700</bug_when>
    <thetext>Created attachment 287687
WIPP

For EWS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225551</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 15:01:23 -0700</bug_when>
    <thetext>Attachment 287687 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSMap.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/MapBase.cpp:57:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSSet.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSMap.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 9 in 52 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>1225608</commentid>
    <comment_count>25</comment_count>
      <attachid>287700</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-01 16:25:28 -0700</bug_when>
    <thetext>Created attachment 287700
WIP

For EWS round two.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225611</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 16:26:54 -0700</bug_when>
    <thetext>Attachment 287700 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSMap.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/MapBase.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSSet.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSMap.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 9 in 60 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>1225615</commentid>
    <comment_count>27</comment_count>
      <attachid>287702</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-01 16:47:35 -0700</bug_when>
    <thetext>Created attachment 287702
WIP

try EWS again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225617</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 16:50:56 -0700</bug_when>
    <thetext>Attachment 287702 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSMap.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.h:28:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/MapBase.cpp:50:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSSet.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:36:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/JSMap.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 9 in 60 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>1225655</commentid>
    <comment_count>29</comment_count>
      <attachid>287714</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-01 19:23:32 -0700</bug_when>
    <thetext>Created attachment 287714
patch

I still want to add some micro benchmarks and some tests to make sure we don&apos;t CSE across side effects. However, I there is more than enough here to get feedback on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225656</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-01 19:25:23 -0700</bug_when>
    <thetext>Attachment 287714 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:44:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:45:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:53:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 7 in 62 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>1225657</commentid>
    <comment_count>31</comment_count>
      <attachid>287714</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-01 19:25:59 -0700</bug_when>
    <thetext>Comment on attachment 287714
patch

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

&gt; PerformanceTests/ES6SampleBench/cli.js:33
&gt; +driver.start(4);

Oops, I&apos;ll revert this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225658</commentid>
    <comment_count>32</comment_count>
      <attachid>287714</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-01 19:27:17 -0700</bug_when>
    <thetext>Comment on attachment 287714
patch

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

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:630
&gt; +void AssemblyHelpers::WangsInt64Hash(GPRReg inputAndResult, GPRReg scratch)

I think we would call this wantsInt64Hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225668</commentid>
    <comment_count>33</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-01 19:58:06 -0700</bug_when>
    <thetext>I have no idea why the linker is unhappy for debug builds, but OK for release builds. I&apos;ll look into it. I wonder if the bot just needs to do a clean build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225671</commentid>
    <comment_count>34</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-09-01 20:07:36 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; I have no idea why the linker is unhappy for debug builds, but OK for
&gt; release builds. I&apos;ll look into it. I wonder if the bot just needs to do a
&gt; clean build.

How about putting the decls in the header HashMapImpl.h? (I&apos;m not sure it works.)

template&lt;&gt;
const ClassInfo HashMapBucket&lt;HashMapBucketDataKey&gt;::s_info;

template&lt;&gt;
const ClassInfo HashMapBucket&lt;HashMapBucketDataKeyValue&gt;::s_info;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225840</commentid>
    <comment_count>35</comment_count>
      <attachid>287782</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-02 11:08:18 -0700</bug_when>
    <thetext>Created attachment 287782
patch

I think debug builds now link</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225845</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-02 11:12:04 -0700</bug_when>
    <thetext>Attachment 287782 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:44:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:45:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:53:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 7 in 63 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>1225899</commentid>
    <comment_count>37</comment_count>
      <attachid>287802</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-02 12:48:48 -0700</bug_when>
    <thetext>Created attachment 287802
patch

with tests, and hopefully a gcc build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225900</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-02 12:51:01 -0700</bug_when>
    <thetext>Attachment 287802 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:44:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:45:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:53:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 7 in 73 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>1225903</commentid>
    <comment_count>39</comment_count>
      <attachid>287803</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-02 12:54:10 -0700</bug_when>
    <thetext>Created attachment 287803
patch

some style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225904</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-02 12:56:30 -0700</bug_when>
    <thetext>Attachment 287803 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:53:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 73 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>1225905</commentid>
    <comment_count>41</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-02 12:59:14 -0700</bug_when>
    <thetext>Some micro benchmarks:
VMs tested:
&quot;og&quot; at /Volumes/Data/WK/a/OpenSource/WebKitBuild/Release/jsc (r205305)
&quot;change&quot; at /Volumes/Data/WK/c/OpenSource/WebKitBuild/Release/jsc (r205305)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                      og                      change                                      

basic-set                                       6.9067+-0.1796            6.6348+-0.3520          might be 1.0410x faster
dense-set                                    2082.9626+-38.8708    ^   1596.7453+-22.6343       ^ definitely 1.3045x faster
large-map-iteration-with-additions            308.2448+-15.6168    ^    279.8445+-4.0339        ^ definitely 1.1015x faster
large-map-iteration-with-mutation             177.1968+-4.2966     ^    157.2736+-7.0407        ^ definitely 1.1267x faster
large-map-iteration                            80.3809+-2.4450           79.1232+-4.3281          might be 1.0159x faster
map-for-each                                    4.6429+-0.4713            4.5304+-0.5044          might be 1.0248x faster
map-for-of                                     15.2826+-0.6587           14.3674+-0.6863          might be 1.0637x faster
map-has-get-cse-opportunity                   211.6554+-3.2528     ^     76.0506+-2.1236        ^ definitely 2.7831x faster
set-for-each                                    3.4934+-0.1058     ?      3.5638+-0.1159        ? might be 1.0201x slower
set-for-of                                      6.6213+-0.3864            6.5081+-0.2273          might be 1.0174x faster
sparse-set                                    122.7255+-1.9305     ^     57.1973+-0.3118        ^ definitely 2.1457x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1225906</commentid>
    <comment_count>42</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-02 12:59:32 -0700</bug_when>
    <thetext>ES6 Sample bench is also 8-10% progressed with my patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226136</commentid>
    <comment_count>43</comment_count>
      <attachid>287803</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-03 08:05:55 -0700</bug_when>
    <thetext>Comment on attachment 287803
patch

Windows build failures:

JSMap.obj : error LNK2019: unresolved external symbol &quot;public: int __thiscall JSC::Structure::get(class JSC::VM &amp;,class JSC::PropertyName,unsigned int &amp;)&quot; (?get@Structure@JSC@@QAEHAAVVM@2@VPropertyName@2@AAI@Z) referenced in function &quot;public: static bool __cdecl JSC::JSObject::getOwnPropertySlot(class JSC::JSObject *,class JSC::ExecState *,class JSC::PropertyName,class JSC::PropertySlot &amp;)&quot; (?getOwnPropertySlot@JSObject@JSC@@SA_NPAV12@PAVExecState@2@VPropertyName@2@AAVPropertySlot@2@@Z) [C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\JavaScriptCore\JavaScriptCore.vcxproj]
JSSet.obj : error LNK2001: unresolved external symbol &quot;public: int __thiscall JSC::Structure::get(class JSC::VM &amp;,class JSC::PropertyName,unsigned int &amp;)&quot; (?get@Structure@JSC@@QAEHAAVVM@2@VPropertyName@2@AAI@Z) [C:\cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\JavaScriptCore\JavaScriptCore.vcxproj]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226741</commentid>
    <comment_count>44</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 10:36:49 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; Comment on attachment 287803 [details]
&gt; patch
&gt; 
&gt; Windows build failures:
&gt; 
&gt; JSMap.obj : error LNK2019: unresolved external symbol &quot;public: int
&gt; __thiscall JSC::Structure::get(class JSC::VM &amp;,class
&gt; JSC::PropertyName,unsigned int &amp;)&quot;
&gt; (?get@Structure@JSC@@QAEHAAVVM@2@VPropertyName@2@AAI@Z) referenced in
&gt; function &quot;public: static bool __cdecl
&gt; JSC::JSObject::getOwnPropertySlot(class JSC::JSObject *,class JSC::ExecState
&gt; *,class JSC::PropertyName,class JSC::PropertySlot &amp;)&quot;
&gt; (?getOwnPropertySlot@JSObject@JSC@@SA_NPAV12@PAVExecState@2@VPropertyName@2@A
&gt; AVPropertySlot@2@@Z)
&gt; [C:
&gt; \cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\JavaScriptCore\JavaSc
&gt; riptCore.vcxproj]
&gt; JSSet.obj : error LNK2001: unresolved external symbol &quot;public: int
&gt; __thiscall JSC::Structure::get(class JSC::VM &amp;,class
&gt; JSC::PropertyName,unsigned int &amp;)&quot;
&gt; (?get@Structure@JSC@@QAEHAAVVM@2@VPropertyName@2@AAI@Z)
&gt; [C:
&gt; \cygwin\home\buildbot\WebKit\WebKitBuild\Release\Source\JavaScriptCore\JavaSc
&gt; riptCore.vcxproj]

I&apos;ll look into this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226745</commentid>
    <comment_count>45</comment_count>
      <attachid>287803</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-06 10:45:27 -0700</bug_when>
    <thetext>Comment on attachment 287803
patch

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

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:6477
&gt; +        LValue map;

I would say:

LBasicBlock lastNext = m_out.insertNewBlocksBefore(loopStart);

Here, and then remove the assignment to lastNext below.  This ensures that if lowMapObject(), lowSetObject(), lowJSValue(), or any of the other things you do between here and the jump will insert their basic blocks before loopStart rather than after continuation.

&gt; Source/JavaScriptCore/runtime/HashMapImpl.cpp:31
&gt; +#include &quot;SlotVisitorInlines.h&quot;

Why not JSCInlines.h?

&gt; Source/JavaScriptCore/runtime/HashMapImpl.h:28
&gt; +#include &quot;JSCJSValueInlines.h&quot;

Why not JSCInlines.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226791</commentid>
    <comment_count>46</comment_count>
      <attachid>288038</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 12:42:22 -0700</bug_when>
    <thetext>Created attachment 288038
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226792</commentid>
    <comment_count>47</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 12:43:02 -0700</bug_when>
    <thetext>I&apos;m letting EWS run. Hopefully windows now builds with an include I added. We shall see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226793</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-06 12:45:47 -0700</bug_when>
    <thetext>Attachment 288038 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/HashMapImpl.cpp:52:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/runtime/JSCJSValue.h:610:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/bytecode/SpeculatedType.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/dfg/DFGNodeType.h:392:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 4 in 75 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>1226804</commentid>
    <comment_count>49</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 13:31:15 -0700</bug_when>
    <thetext>Looks like windows build failure is related to Filip&apos;s previous patch moving TypedArray off of CopiedSpace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226806</commentid>
    <comment_count>50</comment_count>
      <attachid>288041</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 13:43:53 -0700</bug_when>
    <thetext>Created attachment 288041
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226822</commentid>
    <comment_count>51</comment_count>
      <attachid>288041</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-06 14:15:26 -0700</bug_when>
    <thetext>Comment on attachment 288041
patch for landing

Clearing flags on attachment: 288041

Committed r205504: &lt;http://trac.webkit.org/changeset/205504&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226823</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-06 14:15:33 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226829</commentid>
    <comment_count>53</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-06 14:33:53 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 161645</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226834</commentid>
    <comment_count>54</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2016-09-06 14:37:59 -0700</bug_when>
    <thetext>(In reply to comment #53)
&gt; Re-opened since this is blocked by bug 161645

Link to iOS device build failure:
https://build.webkit.org/builders/Apple%20iOS%209%20Release%20%28Build%29/builds/7443</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226858</commentid>
    <comment_count>55</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 15:12:14 -0700</bug_when>
    <thetext>(In reply to comment #54)
&gt; (In reply to comment #53)
&gt; &gt; Re-opened since this is blocked by bug 161645
&gt; 
&gt; Link to iOS device build failure:
&gt; https://build.webkit.org/builders/Apple%20iOS%209%20Release%20%28Build%29/
&gt; builds/7443

Looking into this now, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226893</commentid>
    <comment_count>56</comment_count>
      <attachid>288057</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 15:52:05 -0700</bug_when>
    <thetext>Created attachment 288057
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226920</commentid>
    <comment_count>57</comment_count>
      <attachid>288057</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-06 16:24:01 -0700</bug_when>
    <thetext>Comment on attachment 288057
patch for landing

Clearing flags on attachment: 288057

Committed r205520: &lt;http://trac.webkit.org/changeset/205520&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226921</commentid>
    <comment_count>58</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-06 16:24:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226931</commentid>
    <comment_count>59</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-06 16:57:31 -0700</bug_when>
    <thetext>landed 32-bit build fix in:
https://trac.webkit.org/changeset/205523</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227613</commentid>
    <comment_count>60</comment_count>
      <attachid>288057</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 09:52:52 -0700</bug_when>
    <thetext>Comment on attachment 288057
patch for landing

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

&gt; Source/JavaScriptCore/runtime/HashMapImpl.h:28


Please don&apos;t include *Inlines.h files from other header files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227614</commentid>
    <comment_count>61</comment_count>
      <attachid>288057</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 09:55:02 -0700</bug_when>
    <thetext>Comment on attachment 288057
patch for landing

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

&gt; Source/JavaScriptCore/runtime/HashMapImpl.h:155
&gt; +        DeferGCForAWhile defer(vm.heap);

This seems really bad.  It means: please ignore the amount of memory I&apos;m allocating for the purpose of deciding if I should GC.

I&apos;m pretty sure you don&apos;t want that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227632</commentid>
    <comment_count>62</comment_count>
      <attachid>288057</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-09-08 10:39:50 -0700</bug_when>
    <thetext>Comment on attachment 288057
patch for landing

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

&gt;&gt; Source/JavaScriptCore/runtime/HashMapImpl.h:28
&gt;&gt; +#include &quot;JSCInlines.h&quot;
&gt; 
&gt; Please don&apos;t include *Inlines.h files from other header files.

I&apos;ll make a HashMapImplInlines.h

&gt;&gt; Source/JavaScriptCore/runtime/HashMapImpl.h:155
&gt;&gt; +        DeferGCForAWhile defer(vm.heap);
&gt; 
&gt; This seems really bad.  It means: please ignore the amount of memory I&apos;m allocating for the purpose of deciding if I should GC.
&gt; 
&gt; I&apos;m pretty sure you don&apos;t want that.

I was following the lead of what HashMapData was doing. I think the correct thing to do, is to have a normal
DeferGC in the caller of HashMapBuffer::create(), that way, the HashMapImpl guarantees a GC only happens after
it sets up its pointers in the right places. I don&apos;t think we need it to be DeferGCForAWhile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227635</commentid>
    <comment_count>63</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-09-08 10:43:06 -0700</bug_when>
    <thetext>(In reply to comment #62)
&gt; Comment on attachment 288057 [details]
&gt; patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=288057&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/runtime/HashMapImpl.h:28
&gt; &gt;&gt; +#include &quot;JSCInlines.h&quot;
&gt; &gt; 
&gt; &gt; Please don&apos;t include *Inlines.h files from other header files.
&gt; 
&gt; I&apos;ll make a HashMapImplInlines.h

Would you then make everone who includes HashMapImplInlines.h into an Inlines.h header, too?

It turns out that you can just remove this include.  That&apos;s what I did in my CopiedSpace-&gt;MarkedSpace patch.

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/runtime/HashMapImpl.h:155
&gt; &gt;&gt; +        DeferGCForAWhile defer(vm.heap);
&gt; &gt; 
&gt; &gt; This seems really bad.  It means: please ignore the amount of memory I&apos;m allocating for the purpose of deciding if I should GC.
&gt; &gt; 
&gt; &gt; I&apos;m pretty sure you don&apos;t want that.
&gt; 
&gt; I was following the lead of what HashMapData was doing. I think the correct
&gt; thing to do, is to have a normal
&gt; DeferGC in the caller of HashMapBuffer::create(), that way, the HashMapImpl
&gt; guarantees a GC only happens after
&gt; it sets up its pointers in the right places. I don&apos;t think we need it to be
&gt; DeferGCForAWhile

It turns out that the correct thing to do is to remove DeferGC entirely.

Both Auxiliary MarkedSpace and CopiedSpace are engineered to allow a copied/auxiliary allocation that triggers GCs.  At some point, we started adding a lot of DeferGC&apos;s everywhere.  I don&apos;t think that was a good idea, because it creates a cargo cult: people think they have to use it but they don&apos;t know why.

So, I just removed the DeferGC.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286435</attachid>
            <date>2016-08-18 20:58:15 -0700</date>
            <delta_ts>2016-08-19 19:27:06 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>76690</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE2LTA4LTE2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgQEFycmF5KHNpemUpIGEgYnl0ZWNvZGUgaW50cmluc2ljCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA4NjcKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGVyZSB3ZXJlIGEgZmV3IHBsYWNlcyBp
biB0aGUgY29kZSB3aGVyZSB3ZSB3ZXJlIGVtaXR0aW5nIGBAQXJyYXkoc2l6ZSlgCisgICAgICAg
IG9yIGBuZXcgQEFycmF5KHNpemUpYC4gU2luY2Ugd2UgaGF2ZSBhIGJ5dGVjb2RlIG9wZXJhdGlv
biB0aGF0IGFscmVhZHkKKyAgICAgICAgcmVwcmVzZW50cyB0aGlzLCBjYWxsZWQgbmV3X2FycmF5
X3dpdGhfc2l6ZSwgaXQncyBmYXN0ZXIgdG8ganVzdCBtYWtlIGEKKyAgICAgICAgYnl0ZWNvZGUg
aW50cmluc2ljIGZvciB0aGUgdGhpcyBvcGVyYXRpb24uIFRoaXMgcGF0Y2ggZG9lcyB0aGF0IGFu
ZAorICAgICAgICB0aGUgaW50cmluc2ljIGlzIGNhbGxlZCBgQG5ld0FycmF5V2l0aFNpemVgLiBU
aGlzIG1pZ2h0IGJlIGFyb3VuZCBhCisgICAgICAgIDElIHNwZWVkdXAgb24gRVM2IHNhbXBsZSBi
ZW5jaCwgYnV0IGl0J3Mgd2l0aGluIHRoZSBub2lzZS4gVGhpcyBpcyBqdXN0CisgICAgICAgIGEg
Z29vZCBieXRlY29kZSBvcGVyYXRpb24gdG8gaGF2ZSBiZWNhdXNlIGl0J3MgY29tbW9uIGVub3Vn
aCB0bworICAgICAgICBjcmVhdGUgYXJyYXlzIGFuZCBpdCdzIGdvb2QgdG8gbWFrZSB0aGF0IGZh
c3QgaW4gYWxsIHRpZXJzLgorCisgICAgICAgICogYnVpbHRpbnMvQXJyYXlDb25zdHJ1Y3Rvci5q
czoKKyAgICAgICAgKG9mKToKKyAgICAgICAgKGZyb20pOgorICAgICAgICAqIGJ1aWx0aW5zL0Fy
cmF5UHJvdG90eXBlLmpzOgorICAgICAgICAoZmlsdGVyKToKKyAgICAgICAgKG1hcCk6CisgICAg
ICAgIChzb3J0LnN0cmluZ1NvcnQpOgorICAgICAgICAoc29ydCk6CisgICAgICAgIChjb25jYXRT
bG93UGF0aCk6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5o
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlND
OjpCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX2lzT2JqZWN0KToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19uZXdBcnJheVdp
dGhTaXplKToKKwogMjAxNi0wOC0xNSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
IAogICAgICAgICBDb252ZXJzaW9uIHRvIHNlcXVlbmNlPFQ+IGlzIGJyb2tlbiBmb3IgaXRlcmFi
bGUgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw3IEBAIEphdmFTY3JpcHRDb3Jl
X0JVSUxUSU5TX1NPVVJDRVMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9i
dWlsdGlucy9JbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0
Q29yZSkvYnVpbHRpbnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENv
cmUpL2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRD
b3JlKS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL01vZHVsZUxvYWRlclByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkv
YnVpbHRpbnMvTnVtYmVyQ29uc3RydWN0b3IuanMgXApAQCAtMTQ2LDYgKzE0Nyw3IEBAIE9CSkVD
VF9MVVRfSEVBREVSUyA9IFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBKU1Byb21pc2VQ
cm90b3R5cGUubHV0LmggXAogICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBN
YXBJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBcCiAgICAgTWFwUHJvdG90eXBlLmx1dC5oIFwKICAg
ICBNb2R1bGVMb2FkZXJQcm90b3R5cGUubHV0LmggXAogICAgIE51bWJlckNvbnN0cnVjdG9yLmx1
dC5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQ1MTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTIwMCw3ICsxMjAwLDcgQEAKIAkJNTNGNDBF
OEQxRDU5MDFGMjAwOTlBMUI2IC8qIFdBU01QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXQVNN
UGFyc2VyLmggKi87IH07CiAJCTUzRjQwRThGMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdl
bmVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1M0Y0MEU4RTFENTkwMjgyMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuY3BwICovOyB9
OwogCQk1M0Y0MEU5MTFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9wcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2
IC8qIFdBU01PcHMuaCAqLzsgfTsKLSAgICAgICAgICAgICAgICA1M0Y0MEU5MzFENUE0QUIzMDA5
OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdl
bmVyYXRvci5oICovOyB9OworCQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovOyB9Owog
CQk1M0Y0MEU5NTFENUE3QUVGMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAw
OTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLzsgfTsKIAkJNTNGNDBFOTcxRDVBN0JFQzAw
OTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1
bGVQYXJzZXIuY3BwICovOyB9OwogCQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJu
YWxGdW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTMzOTEsNyArMzM5MSw3IEBACiAJCTUzRjQwRThDMUQ1OTAx
RjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdBU01QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOEUx
RDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdBU01CM0lSR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU9wcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotICAgICAgICAgICAgICAgIDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAv
KiBXQVNNQjNJUkdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBX
QVNNQjNJUkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5
MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU1vZHVsZVBhcnNlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyog
V0FTTU1vZHVsZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXQVNNTW9kdWxlUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNG
NkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmls
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcm5hbEZ1bmN0aW9uQWxs
b2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MjUsNiAr
MzUyNSw3IEBACiAJCTcyQUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MkFBRjdDQzFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5j
dGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUdldHRlclNl
dHRlckZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3QjI1Q0IyQzMw
OTRBOTJBMzhFMURCMyAvKiBKU01vZHVsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU01vZHVsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3OTAxMDczNzFENjY5NzRDMDA1ODA0MjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmphdmFzY3JpcHQ7IHBhdGggPSBNYXBJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vz
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVBY2Nlc3Mu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZF
NTcgLyogSW5saW5lQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
bGluZUFjY2Vzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTE2MERCQjFDOEUz
RUM4MDA4QzA4NUEgLyogUHJveHlSZXZva2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHJveHlSZXZva2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTU2Niw3ICs1NTY3LDcgQEAKIAkJCQk1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV0FT
TU9wcy5oICovLAogCQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0Lmgg
Ki8sCiAJCQkJNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNw
cCAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTNGNDBFOTIxRDVBNEFCMzAw
OTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggKi8sCisJCQkJNTNGNDBFOTIxRDVBNEFCMzAw
OTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTNGNDBFOEExRDU5MDFCQjAw
OTlBMUI2IC8qIFdBU01GdW5jdGlvblBhcnNlci5oICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMw
MDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVG
MDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oICovLApAQCAtNzAxMyw2ICs3MDE0LDcgQEAK
IAkJCQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0
b3IuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUu
anMgKi8sCisJCQkJNzkwMTA3MzcxRDY2OTc0QzAwNTgwNDIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXJQ
cm90b3R5cGUuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3IC8qIE51bWJlckNv
bnN0cnVjdG9yLmpzICovLAogCQkJCUExNURFNUM1MUMwRkJGOEQwMDg5MTMzRCAvKiBOdW1iZXJQ
cm90b3R5cGUuanMgKi8sCkBAIC03OTU2LDcgKzc5NTgsNyBAQAogCQkJCTBGQjU0Njc3MTRGNTlC
NUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTlEQTAwQjAxQkQ1OTk0RTAwRjQ1NzVDIC8qIGxhenl3cml0ZXIucHkgaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQzMTBFMTZGNUNEMDBCMzQ0NjAgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICov
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1M0Y0MEU5MzFENUE0QUIzMDA5OUEx
QjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRTkzMUQ1
QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM1MkUwRTE2RkNFMTAwQjM0NDYwIC8qIExleGVyLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRENGM0Q1NkIxQ0QyOTQ3MjAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTg3QTAyMUJGQkU1NjEwMDM4QkJDQSAvKiBKSVRNdWxH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1
aWx0aW5zL0FycmF5Q29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0FycmF5Q29uc3RydWN0b3IuanMJKHJldmlzaW9uIDIwNDUxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheUNvbnN0cnVjdG9yLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBAIGZ1bmN0aW9uIG9mKC8qIGl0ZW1zLi4uICovKQog
ICAgICJ1c2Ugc3RyaWN0IjsKIAogICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwot
ICAgIHZhciBhcnJheSA9IEBpc0NvbnN0cnVjdG9yKHRoaXMpID8gbmV3IHRoaXMobGVuZ3RoKSA6
IG5ldyBAQXJyYXkobGVuZ3RoKTsKKyAgICB2YXIgYXJyYXkgPSBAaXNDb25zdHJ1Y3Rvcih0aGlz
KSA/IG5ldyB0aGlzKGxlbmd0aCkgOiBAbmV3QXJyYXlXaXRoU2l6ZShsZW5ndGgpOwogICAgIGZv
ciAodmFyIGsgPSAwOyBrIDwgbGVuZ3RoOyArK2spCiAgICAgICAgIEBwdXRCeVZhbERpcmVjdChh
cnJheSwgaywgYXJndW1lbnRzW2tdKTsKICAgICBhcnJheS5sZW5ndGggPSBsZW5ndGg7CkBAIC04
Nyw3ICs4Nyw3IEBAIGZ1bmN0aW9uIGZyb20oaXRlbXMgLyosIG1hcEZuLCB0aGlzQXJnICoKICAg
ICB2YXIgYXJyYXlMaWtlID0gQE9iamVjdChpdGVtcyk7CiAgICAgdmFyIGFycmF5TGlrZUxlbmd0
aCA9IEB0b0xlbmd0aChhcnJheUxpa2UubGVuZ3RoKTsKIAotICAgIHZhciByZXN1bHQgPSBAaXND
b25zdHJ1Y3Rvcih0aGlzT2JqKSA/IG5ldyB0aGlzT2JqKGFycmF5TGlrZUxlbmd0aCkgOiBuZXcg
QEFycmF5KGFycmF5TGlrZUxlbmd0aCk7CisgICAgdmFyIHJlc3VsdCA9IEBpc0NvbnN0cnVjdG9y
KHRoaXNPYmopID8gbmV3IHRoaXNPYmooYXJyYXlMaWtlTGVuZ3RoKSA6IEBuZXdBcnJheVdpdGhT
aXplKGFycmF5TGlrZUxlbmd0aCk7CiAKICAgICB2YXIgayA9IDA7CiAgICAgd2hpbGUgKGsgPCBh
cnJheUxpa2VMZW5ndGgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9B
cnJheVByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVp
bHRpbnMvQXJyYXlQcm90b3R5cGUuanMJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9idWlsdGlucy9BcnJheVByb3RvdHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjEzLDcgKzIxMyw3IEBAIGZ1bmN0aW9uIGZpbHRlcihjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykK
ICAgICAgICAgfQogICAgIH0KICAgICBpZiAoY29uc3RydWN0b3IgPT09IEBBcnJheSB8fCBjb25z
dHJ1Y3RvciA9PT0gQHVuZGVmaW5lZCkKLSAgICAgICAgcmVzdWx0ID0gW107CisgICAgICAgIHJl
c3VsdCA9IEBuZXdBcnJheVdpdGhTaXplKDApOwogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0g
bmV3IGNvbnN0cnVjdG9yKDApOwogCkBAIC0yNjIsNyArMjYyLDcgQEAgZnVuY3Rpb24gbWFwKGNh
bGxiYWNrIC8qLCB0aGlzQXJnICovKQogICAgICAgICB9CiAgICAgfQogICAgIGlmIChjb25zdHJ1
Y3RvciA9PT0gQEFycmF5IHx8IGNvbnN0cnVjdG9yID09PSBAdW5kZWZpbmVkKQotICAgICAgICBy
ZXN1bHQgPSBAQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgcmVzdWx0ID0gQG5ld0FycmF5V2l0aFNp
emUobGVuZ3RoKTsKICAgICBlbHNlCiAgICAgICAgIHJlc3VsdCA9IG5ldyBjb25zdHJ1Y3Rvcihs
ZW5ndGgpOwogCkBAIC02MzAsNyArNjMwLDcgQEAgZnVuY3Rpb24gc29ydChjb21wYXJhdG9yKQog
CiAgICAgICAgIHZhciB2YWx1ZUNvdW50ID0gY29tcGFjdChhcnJheSwgbGVuZ3RoKTsKIAotICAg
ICAgICB2YXIgc3RyaW5ncyA9IG5ldyBAQXJyYXkodmFsdWVDb3VudCk7CisgICAgICAgIHZhciBz
dHJpbmdzID0gQG5ld0FycmF5V2l0aFNpemUodmFsdWVDb3VudCk7CiAgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdmFsdWVDb3VudDsgKytpKQogICAgICAgICAgICAgc3RyaW5nc1tpXSA9IHsg
c3RyaW5nOiBAdG9TdHJpbmcoYXJyYXlbaV0pLCB2YWx1ZTogYXJyYXlbaV0gfTsKIApAQCAtNjgw
LDcgKzY4MCw3IEBAIGZ1bmN0aW9uIGNvbmNhdFNsb3dQYXRoKCkKICAgICB2YXIgYXJnQ291bnQg
PSBhcmd1bWVudHMubGVuZ3RoOwogICAgIHZhciByZXN1bHQ7CiAgICAgaWYgKGNvbnN0cnVjdG9y
ID09PSBAQXJyYXkgfHwgY29uc3RydWN0b3IgPT09IEB1bmRlZmluZWQpCi0gICAgICAgIHJlc3Vs
dCA9IFtdOworICAgICAgICByZXN1bHQgPSBAbmV3QXJyYXlXaXRoU2l6ZSgwKTsKICAgICBlbHNl
CiAgICAgICAgIHJlc3VsdCA9IG5ldyBjb25zdHJ1Y3RvcigwKTsKICAgICB2YXIgcmVzdWx0SXNB
cnJheSA9IEBpc0pTQXJyYXkocmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
dWlsdGlucy9CdWlsdGluTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTEsOCArOTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhjYXBhYmlsaXRpZXMpIFwK
ICAgICBtYWNybyhzdGFyRGVmYXVsdCkgXAogICAgIG1hY3JvKEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbikgXAotICAgIG1hY3JvKGdldCkgXAotICAgIG1hY3JvKHNldCkgXAogICAgIG1hY3JvKHNo
aWZ0KSBcCiAgICAgbWFjcm8oYWxsb2NhdGVUeXBlZEFycmF5KSBcCiAgICAgbWFjcm8oSW50OEFy
cmF5KSBcCkBAIC0xMzQsNyArMTMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ocHJl
ZGljdEZpbmFsTGVuZ3RoRnJvbUFyZ3VtdW50cykgXAogICAgIG1hY3JvKHByaW50KSBcCiAgICAg
bWFjcm8oaXNTZXQpIFwKLSAgICBtYWNybyhpc01hcCkgXAogICAgIG1hY3JvKHJlZ0V4cENyZWF0
ZSkgXAogICAgIG1hY3JvKFNldEl0ZXJhdG9yKSBcCiAgICAgbWFjcm8oc2V0SXRlcmF0b3JOZXh0
KSBcCkBAIC0xNTgsOCArMTU1LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKHJlZ0V4
cFRlc3RGYXN0KSBcCiAgICAgbWFjcm8oc3RyaW5nSW5jbHVkZXNJbnRlcm5hbCkgXAogICAgIG1h
Y3JvKHN0cmluZ1NwbGl0RmFzdCkgXAotICAgIG1hY3JvKHN0cmluZ1N1YnN0ckludGVybmFsKQor
ICAgIG1hY3JvKHN0cmluZ1N1YnN0ckludGVybmFsKSBcCisgICAgbWFjcm8obWFwSGVhZCkgXAor
ICAgIG1hY3JvKG1hcFRhaWwpIFwKKyAgICBtYWNybyhtYXBUYWJsZSkgXAorICAgIG1hY3JvKG1h
cEhhc2gpIFwKKyAgICBtYWNybyhtYXBTaXplKSBcCisgICAgbWFjcm8obWFwQnVja2V0KSBcCisK
IAorICAgIC8qCisgICAgbWFjcm8oZ2V0KSBcCisgICAgbWFjcm8oc2V0KSBcCisgICAgKi8KIAog
I2RlZmluZSBJTklUSUFMSVpFX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZKG5hbWUpIG1fcHJpdmF0
ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjUHJpdmF0ZU5hbWUuaW1wbCgpLCAmbV8jI25hbWUp
OwogI2RlZmluZSBJTklUSUFMSVpFX1BVQkxJQ19UT19QUklWQVRFX0VOVFJZKG5hbWUpIG1fcHVi
bGljVG9Qcml2YXRlTWFwLmFkZChtXyMjbmFtZS5pbXBsKCksICZtXyMjbmFtZSMjUHJpdmF0ZU5h
bWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJv
dG90eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9N
YXBJdGVyYXRvclByb3RvdHlwZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworZnVuY3Rpb24gbmV4dCgpCit7CisgICAgbGV0IGxhc3RNYXBCdWNrZXQgPSB0aGlzLkBtYXBC
dWNrZXQ7CisgICAgaWYgKCFsYXN0TWFwQnVja2V0KQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVF
cnJvcigiQ2Fubm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0ZXJhdG9y
IG9iamVjdCIpOworCisgICAgbGV0IGxpc3ROZXh0ID0gbGFzdE1hcEJ1Y2tldC5saXN0TmV4dDsK
KyAgICB3aGlsZSAobGlzdE5leHQgJiYgbGlzdE5leHQuZGVsZXRlZCkKKyAgICAgICAgbGlzdE5l
eHQgPSBsaXN0TmV4dC5saXN0TmV4dDsKKworICAgIGlmIChsaXN0TmV4dCkgeworICAgICAgICB0
aGlzLkBtYXBCdWNrZXQgPSBsaXN0TmV4dDsKKyAgICAgICAgcmV0dXJuIHtkb25lOiBmYWxzZSwg
dmFsdWU6IFtsaXN0TmV4dC5rZXksIGxpc3ROZXh0LnZhbHVlXX07CisgICAgfQorICAgIHJldHVy
biB7ZG9uZTogdHJ1ZX07Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
TWFwUHJvdG90eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9NYXBQcm90b3R5cGUuanMJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsy
OCw3IEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8KIHsKICAgICAi
dXNlIHN0cmljdCI7CiAKLSAgICBpZiAoIUBpc01hcCh0aGlzKSkKKyAgICBpZiAoIUBpc0pTTWFw
KHRoaXMpKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxs
ZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKIAogICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdm
dW5jdGlvbicpCkBAIC00NCwzICs0NSwxODIgQEAgZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjayAv
KiwgdGhpc0FyZyAqLwogICAgICAgICBjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCB2YWx1ZVsxXSwg
dmFsdWVbMF0sIHRoaXMpOwogICAgIH0KIH0KKworZnVuY3Rpb24gZ2V0KGtleSkKK3sKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc0pTTWFwKHRoaXMpKQorICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsK
KworICAgIGxldCB0YWJsZSA9IHRoaXMuQG1hcFRhYmxlOworICAgIGxldCB0YWJsZUxlbiA9IHRh
YmxlLmxlbmd0aDsgCisgICAgbGV0IG1hc2sgPSB0YWJsZUxlbiAtIDE7CisgICAgbGV0IGhhc2gg
PSBAanNNYXBIYXNoKGtleSkgJiBtYXNrOworICAgIGxldCBidWNrZXQgPSB0YWJsZVtoYXNoXTsK
KyAgICBsZXQgYWRkZXIgPSAxOworICAgIHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgaWYgKGJ1
Y2tldC5rZXkgPT09IGtleSAmJiAhYnVja2V0LmRlbGV0ZWQpCisgICAgICAgICAgICByZXR1cm4g
YnVja2V0LnZhbHVlOworICAgICAgICBoYXNoID0gKGhhc2ggKyBhZGRlcioqMikgJiBtYXNrOwor
ICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgYWRkZXIrKzsKKyAgICB9Cisg
ICAgcmV0dXJuIEB1bmRlZmluZWQ7Cit9CisKK2Z1bmN0aW9uIGhhcyhrZXkpCit7CisgICAgInVz
ZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisK
KyAgICBsZXQgdGFibGUgPSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4gPSB0YWJs
ZS5sZW5ndGg7IAorICAgIGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAgIGxldCBoYXNoID0g
QGpzTWFwSGFzaChrZXkpICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07Cisg
ICAgbGV0IGFkZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGlmIChidWNr
ZXQua2V5ID09PSBrZXkgJiYgIWJ1Y2tldC5kZWxldGVkKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGhhc2ggPSAoaGFzaCArIGFkZGVyKioyKSAmIG1hc2s7CisgICAgICAgIGJ1
Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICBhZGRlcisrOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZShrZXkpCit7CisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
Ik1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQgdGFi
bGUgPSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4gPSB0YWJsZS5sZW5ndGg7IAor
ICAgIGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChr
ZXkpICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgbGV0IGFkZGVy
ID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGlmIChidWNrZXQua2V5ID09PSBr
ZXkgJiYgIWJ1Y2tldC5kZWxldGVkKSB7CisgICAgICAgICAgICBidWNrZXQuZGVsZXRlZCA9IHRy
dWU7CisgICAgICAgICAgICBidWNrZXQubGlzdE5leHQubGlzdFByZXYgPSBidWNrZXQubGlzdFBy
ZXY7CisgICAgICAgICAgICBidWNrZXQubGlzdFByZXYubGlzdE5leHQgPSBidWNrZXQubGlzdE5l
eHQ7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBoYXNoID0g
KGhhc2ggKyBhZGRlcioqMikgJiBtYXNrOworICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsK
KyAgICAgICAgYWRkZXIrKzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworCit9CisKK0BnbG9i
YWxQcml2YXRlCitmdW5jdGlvbiBqc01hcFJlaGFzaChtYXAsIG9sZExlbikKK3sKKyAgICBsZXQg
bmV3U2l6ZSA9IG9sZExlbiAqIDI7CisgICAgbGV0IHRhYmxlID0gQG5ld0FycmF5V2l0aFNpemUo
bmV3U2l6ZSk7CisgICAgbWFwLkBtYXBUYWJsZSA9IHRhYmxlOworICAgIGxldCBtYXNrID0gbmV3
U2l6ZSAtIDE7CisgICAgbGV0IG5vZGUgPSBtYXAuQG1hcEhlYWQubGlzdE5leHQ7CisgICAgbGV0
IG5leHROb2RlID0gbm9kZS5saXN0TmV4dDsKKyAgICB3aGlsZSAobmV4dE5vZGUpIHsKKyAgICAg
ICAgbGV0IGtleSA9IG5vZGUua2V5OworICAgICAgICBsZXQgaGFzaCA9IEBqc01hcEhhc2goa2V5
KSAmIG1hc2s7CisgICAgICAgIGxldCBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgbGV0
IGFkZGVyID0gMTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICAgICAgaGFzaCA9
IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tldCA9IHRhYmxlW2hh
c2hdOworICAgICAgICAgICAgYWRkZXIrKzsKKyAgICAgICAgfQorCisgICAgICAgIHRhYmxlW2hh
c2hdID0gbm9kZTsKKyAgICAgICAgbm9kZSA9IG5leHROb2RlOworICAgICAgICBuZXh0Tm9kZSA9
IG5leHROb2RlLmxpc3ROZXh0OworICAgIH0KK30KKworZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUp
Cit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAg
ICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAg
b2JqZWN0Iik7CisKKyAgICBsZXQgdGFibGUgPSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFi
bGVMZW4gPSB0YWJsZS5sZW5ndGg7IAorICAgIGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAg
IGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkpICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFi
bGVbaGFzaF07CisgICAgbGV0IGFkZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAg
ICAgIGlmIChidWNrZXQua2V5ID09PSBrZXkpIHsKKyAgICAgICAgICAgIGJ1Y2tldC52YWx1ZSA9
IHZhbHVlOworICAgICAgICAgICAgYnVja2V0LmRlbGV0ZWQgPSBmYWxzZTsgLy8gTWF5YmUgd2Ug
d2VyZSBkZWxldGVkIGJlZm9yZSwgYnV0IHdlIGFyZSBub3QgYW55bW9yZS4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBoYXNoID0gKGhhc2ggKyBhZGRlcioqMikgJiBt
YXNrOworICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgYWRkZXIrKzsKKyAg
ICB9CisKKyAgICBsZXQgbWFwVGFpbCA9IHRoaXMuQG1hcFRhaWw7CisgICAgbGV0IG5ld0l0ZW0g
PSB7CisgICAgICAgIGxpc3ROZXh0OiBtYXBUYWlsLAorICAgICAgICBsaXN0UHJldjogbWFwVGFp
bC5saXN0UHJldiwKKyAgICAgICAga2V5OiBrZXksCisgICAgICAgIHZhbHVlOiB2YWx1ZSwKKyAg
ICAgICAgZGVsZXRlZDogZmFsc2UKKyAgICB9OworICAgIG1hcFRhaWwubGlzdFByZXYgPSBuZXdJ
dGVtOworICAgIG5ld0l0ZW0ubGlzdFByZXYubGlzdE5leHQgPSBuZXdJdGVtOworCisgICAgdGFi
bGVbaGFzaF0gPSBuZXdJdGVtOworCisgICAgbGV0IG5ld1NpemUgPSArK3RoaXMuQG1hcFNpemU7
CisgICAgaWYgKDIgKiBuZXdTaXplID4gdGFibGVMZW4pIHsgLy8gRG8gaW50IG11bHMgYW5kIGNv
bXBhcmUuIFRoaXMgaXMganVzdCBjaGVja2luZyBpZiB3ZSdyZSBmaWxsZWQgdXAgbW9yZSB0aGFu
IDEvMi4KKyAgICAgICAgQGpzTWFwUmVoYXNoKHRoaXMsIHRhYmxlTGVuKTsKKyAgICB9IAorfQor
CitmdW5jdGlvbiBjbGVhcihrZXksIHZhbHVlKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAg
b3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgdGhpcy5AbWFwVGFi
bGUgPSBAbmV3QXJyYXlXaXRoU2l6ZSg0KTsKKyAgICB0aGlzLkBtYXBUYWlsLmxpc3RQcmV2ID0g
dGhpcy5AbWFwSGVhZDsKKyAgICB0aGlzLkBtYXBIZWFkLmxpc3ROZXh0ID0gdGhpcy5AbWFwVGFp
bDsKK30KKworZnVuY3Rpb24gbGlzdEFzQXJyYXkoKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKwor
ICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJN
YXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHJlc3Vs
dCA9IFtdOworCisgICAgbGV0IGJ1Y2tldCA9IHRoaXMuQG1hcEhlYWQ7CisgICAgd2hpbGUgKGJ1
Y2tldCkgeworICAgICAgICByZXN1bHQucHVzaCh7CisgICAgICAgICAgICBrZXk6IGJ1Y2tldC5r
ZXkgfHwgIkVNUFRZIiwKKyAgICAgICAgICAgIHZhbHVlOiBidWNrZXQudmFsdWUgfHwgIkVNUFRZ
IgorICAgICAgICB9KTsKKyAgICAgICAgYnVja2V0ID0gYnVja2V0Lmxpc3ROZXh0OworICAgIH0K
KyAgICByZXR1cm4geworICAgICAgICB0YWJsZUxlbmd0aDogdGhpcy5AbWFwVGFibGUubGVuZ3Ro
LAorICAgICAgICBtYXBTaXplOiB0aGlzLkBtYXBTaXplLAorICAgICAgICBhcnJheTogcmVzdWx0
CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUludHJpbnNpY1JlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAkocmV2aXNpb24gMjA0NTE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsMTAgQEAgY2xhc3MgSWRlbnRpZmllcjsK
ICAgICBtYWNybyh0cnlHZXRCeUlkKSBcCiAgICAgbWFjcm8ocHV0QnlWYWxEaXJlY3QpIFwKICAg
ICBtYWNybyh0b051bWJlcikgXAotICAgIG1hY3JvKHRvU3RyaW5nKQorICAgIG1hY3JvKHRvU3Ry
aW5nKSBcCisgICAgbWFjcm8obmV3QXJyYXlXaXRoU2l6ZSkgXAorICAgIG1hY3JvKGpzTWFwSGFz
aCkgXAorICAgIG1hY3JvKGlzSlNNYXApIFwKIAogI2RlZmluZSBKU0NfQ09NTU9OX0JZVEVDT0RF
X0lOVFJJTlNJQ19DT05TVEFOVFNfRUFDSF9OQU1FKG1hY3JvKSBcCiAgICAgbWFjcm8odW5kZWZp
bmVkKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCShyZXZpc2lvbiAyMDQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcg
QEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX251bWJlciIsICJsZW5ndGgiIDogMyB9
LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfc3RyaW5nIiwgImxlbmd0aCIgOiAzIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19qc2FycmF5IiwgImxlbmd0aCIgOiAzIH0s
CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19qc21hcCIsICJsZW5ndGgiIDogMyB9LAog
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfb2JqZWN0IiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19vYmplY3Rfb3JfbnVsbCIsICJsZW5ndGgiIDog
MyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfZnVuY3Rpb24iLCAibGVuZ3RoIiA6
IDMgfSwKQEAgLTE0Nyw3ICsxNDgsOCBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVz
dW1lIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF93YXRjaGRv
ZyIsICJsZW5ndGgiIDogMSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbG9nX3NoYWRv
d19jaGlja2VuX3Byb2xvZ3VlIiwgImxlbmd0aCIgOiAyfSwKLSAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsIiwgImxlbmd0aCIgOiAzfQorICAgICAgICAg
ICAgeyAibmFtZSIgOiAib3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwiLCAibGVuZ3RoIiA6IDN9
LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfanNtYXBfaGFzaCIsICJsZW5ndGgiIDogMyB9
CiAgICAgICAgIF0KICAgICB9LAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAyMDQ1MTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5
KQpAQCAtMTcxLDYgKzE3MSw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgK
ICAgICBjYXNlIG9wX2lzX251bWJlcjoKICAgICBjYXNlIG9wX2lzX3N0cmluZzoKICAgICBjYXNl
IG9wX2lzX2pzYXJyYXk6CisgICAgY2FzZSBvcF9pc19qc21hcDoKICAgICBjYXNlIG9wX2lzX29i
amVjdDoKICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOgogICAgIGNhc2Ugb3BfaXNfZnVu
Y3Rpb246CkBAIC0xOTAsNiArMTkxLDcgQEAgdm9pZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zm
c2V0KAogICAgIGNhc2Ugb3BfZ2V0X3BhcmVudF9zY29wZToKICAgICBjYXNlIG9wX2NyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzOgogICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgY2FzZSBvcF9q
c21hcF9oYXNoOgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiB7CiAgICAgICAgIEFT
U0VSVChvcGNvZGVMZW5ndGhzW29wY29kZUlEXSA+IDIpOwogICAgICAgICBmdW5jdG9yKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwpA
QCAtNDE5LDYgKzQyMSw3IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2Rl
QmwKICAgICBjYXNlIG9wX2lzX251bWJlcjoKICAgICBjYXNlIG9wX2lzX3N0cmluZzoKICAgICBj
YXNlIG9wX2lzX2pzYXJyYXk6CisgICAgY2FzZSBvcF9pc19qc21hcDoKICAgICBjYXNlIG9wX2lz
X29iamVjdDoKICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9udWxsOgogICAgIGNhc2Ugb3BfaXNf
ZnVuY3Rpb246CkBAIC00NjQsNiArNDY3LDcgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2Rl
T2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfdW5zaWduZWQ6CiAgICAgY2FzZSBvcF9nZXRfZnJv
bV9hcmd1bWVudHM6IAogICAgIGNhc2Ugb3BfY3JlYXRlX3Jlc3Q6CisgICAgY2FzZSBvcF9qc21h
cF9oYXNoOgogICAgIGNhc2Ugb3BfZ2V0X3Jlc3RfbGVuZ3RoOiB7CiAgICAgICAgIEFTU0VSVChv
cGNvZGVMZW5ndGhzW29wY29kZUlEXSA+IDEpOwogICAgICAgICBmdW5jdG9yKGNvZGVCbG9jaywg
aW5zdHJ1Y3Rpb24sIG9wY29kZUlELCBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTE5LDYgKzExMTksMTQgQEAgdm9pZCBDb2RlQmxvY2s6OmR1
bXBCeXRlY29kZSgKICAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImlzX2pzYXJyYXkiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAg
ICAgIGNhc2Ugb3BfaXNfanNtYXA6IHsKKyAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImlzX2pzbWFwIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIG9wX2pzbWFwX2hhc2g6IHsKKyAgICAgICAgICAgIHByaW50VW5h
cnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImpzbWFwX2hhc2giKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7CiAgICAgICAg
ICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19vYmplY3QiKTsK
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA0NTE3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MjksNiArNjI5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogaW5kZXgpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0pTQXJyYXkoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wKG9wX2lzX2pz
YXJyYXksIGRzdCwgc3JjKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNKU01hcChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdFVuYXJ5T3Aob3BfaXNf
anNtYXAsIGRzdCwgc3JjKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SlNNYXBIYXNoKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlPcChvcF9q
c21hcF9oYXNoLCBkc3QsIHNyYyk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzT2JqZWN0
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
cmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTMs
NiArOTUzLDM4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF8KICAg
ICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBnZW5lcmF0
b3IuZW1pdElzT2JqZWN0KGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgc3JjLmdldCgp
KSk7CiB9CiAKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5z
aWNfbmV3QXJyYXlXaXRoU2l6ZShKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIEpT
Qzo6UmVnaXN0ZXJJRCogZHN0KQoreworICAgIEFyZ3VtZW50TGlzdE5vZGUqIG5vZGUgPSBtX2Fy
Z3MtPm1fbGlzdE5vZGU7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNpemUgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUobm9kZSk7CisgICAgQVNTRVJUKCFub2RlLT5tX25leHQpOworCisgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZpbmFsRGVzdGluYXRpb24gPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QpOworICAgIGdlbmVyYXRvci5lbWl0TmV3QXJyYXlXaXRoU2l6ZShmaW5hbERlc3RpbmF0
aW9uLmdldCgpLCBzaXplLmdldCgpKTsKKyAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbi5nZXQo
KTsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNp
Y19qc01hcEhhc2goSlNDOjpCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBKU0M6OlJlZ2lz
dGVySUQqIGRzdCkKK3sKKyAgICBBcmd1bWVudExpc3ROb2RlKiBub2RlID0gbV9hcmdzLT5tX2xp
c3ROb2RlOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzaXplID0gZ2VuZXJhdG9yLmVtaXROb2Rl
KG5vZGUpOworICAgIEFTU0VSVCghbm9kZS0+bV9uZXh0KTsKKworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmaW5hbERlc3RpbmF0aW9uID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsK
KyAgICBnZW5lcmF0b3IuZW1pdEpTTWFwSGFzaChmaW5hbERlc3RpbmF0aW9uLmdldCgpLCBzaXpl
LmdldCgpKTsKKyAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbi5nZXQoKTsKK30KKworUmVnaXN0
ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19pc0pTTWFwKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgSlNDOjpSZWdpc3RlcklEKiBkc3QpCit7Cisg
ICAgQXJndW1lbnRMaXN0Tm9kZSogbm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gc2l6ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKKyAgICBBU1NF
UlQoIW5vZGUtPm1fbmV4dCk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0aW5h
dGlvbiA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgZ2VuZXJhdG9yLmVt
aXRJc0pTTWFwKGZpbmFsRGVzdGluYXRpb24uZ2V0KCksIHNpemUuZ2V0KCkpOworICAgIHJldHVy
biBmaW5hbERlc3RpbmF0aW9uLmdldCgpOworfQogCiAjZGVmaW5lIEpTQ19ERUNMQVJFX0JZVEVD
T0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5FUkFUT1JTKG5hbWUpIFwKICAgICBSZWdpc3RlcklE
KiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljXyMjbmFtZShCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyMCw2ICsx
MDIwLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBKU01hcEhhc2g6IHsKKyAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICB9CisK
ICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc0pTQXJyYXk6CiAgICAgY2FzZSBJc1VuZGVm
aW5lZDoKQEAgLTEwMzAsNiArMTAzNSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICBjYXNlIElzT2JqZWN0T3JOdWxsOgogICAgIGNhc2UgSXNGdW5jdGlv
bjoKICAgICBjYXNlIElzUmVnRXhwT2JqZWN0OgorICAgIGNhc2UgSXNKU01hcDoKICAgICBjYXNl
IElzVHlwZWRBcnJheVZpZXc6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSBjaGlsZCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoY2hpbGQudmFsdWUoKSkgewpAQCAtMTAz
OCw2ICsxMDQ0LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgY2FzZSBJc0pTQXJyYXk6CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQo
bm9kZSwganNCb29sZWFuKGNoaWxkLnZhbHVlKCkuaXNPYmplY3QoKSAmJiBjaGlsZC52YWx1ZSgp
LmdldE9iamVjdCgpLT50eXBlKCkgPT0gQXJyYXlUeXBlKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIElzSlNNYXA6CisgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNCb29sZWFuKGNoaWxkLnZhbHVlKCkuaXNPYmplY3QoKSAmJiBjaGlsZC52YWx1
ZSgpLmdldE9iamVjdCgpLT50eXBlKCkgPT0gSlNNYXBUeXBlKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgICAgICAgICAgICAgIHNl
dENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbigKICAgICAgICAgICAgICAgICAgICAgY2hpbGQudmFs
dWUoKS5pc0NlbGwoKQpAQCAtMTI3OSw2ICsxMjg4LDkgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAK
KyAgICAgICAgY2FzZSBJc0pTTWFwOgorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA0NTE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5NDgsNiArMzk0OCwxOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19qc2FycmF5
KTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ugb3BfaXNfanNtYXA6IHsKKyAgICAgICAgICAg
IE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKElzSlNNYXAsIHZhbHVlKSk7CisgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9pc19qc21hcCk7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIG9wX2pzbWFwX2hhc2g6IHsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBh
ZGRUb0dyYXBoKEpTTWFwSGFzaCwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2pzbWFwX2hhc2gpOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsK
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKElzT2JqZWN0LCB2
YWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcgQEAgQ2Fw
YWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfaXNfbnVt
YmVyOgogICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgogICAgIGNhc2Ugb3BfaXNfanNhcnJheToKKyAg
ICBjYXNlIG9wX2lzX2pzbWFwOgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgogICAgIGNhc2Ugb3Bf
aXNfb2JqZWN0X29yX251bGw6CiAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKQEAgLTI0MSw2ICsy
NDIsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2Fz
ZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKICAgICBjYXNlIG9wX3B1dF90b19zY29wZToK
ICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgY2FzZSBvcF9qc21hcF9oYXNoOgogICAg
ICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNhc2Ugb3BfbmV3X3JlZ2V4
cDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAyMDQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDYgKzE2Niw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNl
IENvbXBhcmVFcVB0cjoKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CiAg
ICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xl
YW46CkBAIC0xOTAsNiArMTkxLDExIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUKICAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CiAgICAgICAgIHJldHVybjsK
IAorICAgIC8vIEZJWE1FOiBjb25zaWRlciB3aGF0IGhhcHBlbnMgd2hlbiB3ZSByZXNvbHZlIGEg
cm9wZSBoZXJlLgorICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5v
ZGUpKTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRP
cjoKICAgICBjYXNlIEJpdFhvcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIGJvb2wgZG9l
c0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAg
Y2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNK
U01hcDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNl
IElzQm9vbGVhbjoKQEAgLTE4NSw2ICsxODYsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVja1dhdGNo
ZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CisgICAgY2FzZSBKU01hcEhh
c2g6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2Fs
OgogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MjMsNiArMTUyMywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
IAorICAgICAgICBjYXNlIElzSlNNYXA6IHsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVz
ZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJl
IHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9w
Y29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CkBAIC0xNTk0LDYgKzE2MDAsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5VmFsV2l0aFRoaXM6CiAgICAgICAgIGNhc2UgR2V0
QnlWYWxXaXRoVGhpczoKICAgICAgICAgY2FzZSBDb21wYXJlRXFQdHI6CisgICAgICAgIGNhc2Ug
SlNNYXBIYXNoOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2
aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNiArMzA5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIG1hY3JvKEluc3RhbmNlT2ZDdXN0b20sIE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKICAgICBtYWNybyhJc0pTQXJyYXksIE5vZGVS
ZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8oSXNKU01hcCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwK
ICAgICBtYWNybyhJc0VtcHR5LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzVW5k
ZWZpbmVkLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzQm9vbGVhbiwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKQEAgLTM4OCw3ICszODksOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBu
YW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51
bWVyYXRvckdlbmVyaWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAot
ICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKKyAgICBtYWNybyhUb0luZGV4
U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICAvKiBIYXNoaW5nIGZvciBKU01hcCAqLyBcCisg
ICAgbWFjcm8oSlNNYXBIYXNoLCBOb2RlUmVzdWx0SW50MzIpIFwKIAogLy8gVGhpcyBlbnVtIGdl
bmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMs
CiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBp
ZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4
aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTY29wZWRBcmd1
bWVudHMuaCIKQEAgLTE3MTksNiArMTcyMCwxNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0RHluYW1pY1ZhCiAgICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhl
YywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIHNsb3QpOwogfQogCitpbnQzMl90IEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgaW5wdXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
TWFwSGFzaChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoaW5wdXQpKTsKKyAgICBpZiAodm0uZXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiByZXN1bHQuYXNJbnQzMigpOwor
fQorCiBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25O
b3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KQogewogICAgIC8vIEl0
J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55
d2F5cywgZG9pbmcgc28gd291bGRuJ3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCw4IEBA
IHZvaWQgSklUX09QRVJBVElPTiBkZWJ1Z09wZXJhdGlvblByaW50U3AKIAogdm9pZCBKSVRfT1BF
UkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqLCBPU1JFeGl0QmFzZSop
IFdURl9JTlRFUk5BTDsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwSGFz
aChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCk7CisKICNpZiBVU0UoSlNWQUxVRTMy
XzY0KQogZG91YmxlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmFuZG9tKEpTR2xvYmFsT2JqZWN0
Kik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDQ1MTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQ0LDYgKzc0NCwxMSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEpTTWFwSGFzaDogewor
ICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC03ODcsNiArNzkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAg
ICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgorICAg
ICAgICBjYXNlIElzSlNNYXA6CiAgICAgICAgIGNhc2UgSXNFbXB0eToKICAgICAgICAgY2FzZSBJ
c1VuZGVmaW5lZDoKICAgICAgICAgY2FzZSBJc0Jvb2xlYW46CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA0NTE3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI1OCw2ICsyNTgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToK
ICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CiAgICAgY2FzZSBJc0VtcHR5
OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46CkBAIC0zNTUsNiAr
MzU2LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgR2V0RHluYW1pY1ZhcjoKICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgY2FzZSBSZXNv
bHZlU2NvcGU6CisgICAgY2FzZSBKU01hcEhhc2g6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgY2FzZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDY2OSw2ICs0NjY5LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBJc0pTTWFwOiB7Cisg
ICAgICAgIGNvbXBpbGVJc0pTTWFwKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBjYXNlIEpTTWFwSGFzaDogeworICAgICAgICBjb21waWxlSlNNYXBIYXNoKG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNDUxNykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjEwLDYgKzM2MTAsODQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUlzSlNBcnJheShObwogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTTWFwKE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUKG5vZGUtPnR5cGUoKSA9PSBJc0pTTWFwKTsKKyAgICBpZiAobm9kZS0+Y2hp
bGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1faml0LmNv
bXBhcmU4KEpJVENvbXBpbGVyOjpFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHZhbHVlR1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgICAg
IFRydXN0ZWRJbW0zMihKU01hcFR5cGUpLAorICAgICAgICAgICAgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYmxlc3NCb29sZWFuKHJlc3VsdEdQUik7CisgICAgICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUkZsdXNoZWRD
YWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKworICAgIEpTVmFsdWVSZWdzIHZhbHVlUmVncyA9IHZh
bHVlLmpzVmFsdWVSZWdzKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2Vs
bCh2YWx1ZVJlZ3MpOworCisgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGlsZXI6OkVxdWFsLAor
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwKKyAgICAgICAgVHJ1c3RlZEltbTMyKEpTTWFwVHlw
ZSksCisgICAgICAgIHJlc3VsdEdQUik7CisgICAgYmxlc3NCb29sZWFuKHJlc3VsdEdQUik7Cisg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2Vs
bC5saW5rKCZtX2ppdCk7CisgICAgbW92ZUZhbHNlVG8ocmVzdWx0R1BSKTsKKworICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVKU01hcEhhc2goTm9kZSogbm9kZSkK
K3sKKyAgICBBU1NFUlQobm9kZS0+dHlwZSgpID09IEpTTWFwSGFzaCk7CisKKyAgICBKU1ZhbHVl
T3BlcmFuZCBpbnB1dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc3RyYWlnaHRIYXNoOworICAgIGF1dG8gaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZO
b3RDZWxsKGlucHV0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7
CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgIHN0cmFpZ2h0SGFzaC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAg
c3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUikpOwor
ICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhp
bnB1dEdQUikpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgIHN0
cmFpZ2h0SGFzaC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQuanNNYXBIYXNoKGlucHV0R1BSLCBy
ZXN1bHRHUFIpOworICAgIG1faml0Lm1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAgYXV0
byBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25KU01hcEhhc2gsIHJlc3VsdEdQUiwgaW5wdXRHUFIpOworICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworCisg
ICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
K30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqIG5v
ZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTYsNiArNzU2LDggQEAgcHVibGljOgogICAg
IHZvaWQgY29tcGlsZUluc3RhbmNlT2ZDdXN0b20oTm9kZSopOwogCiAgICAgdm9pZCBjb21waWxl
SXNKU0FycmF5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJc0pTTWFwKE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVKU01hcEhhc2goTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzUmVnRXhwT2Jq
ZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc1R5cGVkQXJyYXlWaWV3KE5vZGUqKTsKIApA
QCAtMTY3MSw2ICsxNjczLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwo
b3BlcmF0aW9uKTsKICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEp
CisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0
aW9uX0VKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQg
YXJnMiwgdW5zaWduZWQgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmcz
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAyMDQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsOCBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBUaHJvd1JlZmVyZW5j
ZUVycm9yOgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAg
Y2FzZSBJc0pTTWFwOgorICAgIGNhc2UgSlNNYXBIYXNoOgogICAgIGNhc2UgSXNFbXB0eToKICAg
ICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29sZWFuOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA0NTE3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OTcsNiArODk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNK
U0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAgICAgICAgIGNvbXBpbGVJc0pTTWFwKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6CisgICAgICAgICAg
ICBjb21waWxlSlNNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJ
c09iamVjdDoKICAgICAgICAgICAgIGNvbXBpbGVJc09iamVjdCgpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC02MjY0LDYgKzYyNzAsMTE0IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVzdWx0KSk7CiAgICAgfQogCisg
ICAgdm9pZCBjb21waWxlSlNNYXBIYXNoKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGwg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN0cmFpZ2h0SGFzaCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzTnVtYmVyQ2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUo
bm90Q2VsbCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNDZWxsQ2FzZSwgbm90Q2VsbCk7CisgICAgICAgIExWYWx1ZSBpc1N0cmluZyA9IG1fb3V0
LmVxdWFsKG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5m
b1R5cGUpLCBtX291dC5jb25zdEludDMyKFN0cmluZ1R5cGUpKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgaXNTdHJpbmcsIHVuc3VyZShzbG93Q2FzZSksIHVuc3VyZShzdHJh
aWdodEhhc2gpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsLCBpc051bWJlckNh
c2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc051bWJlcih2YWx1ZSks
IHVuc3VyZShpc051bWJlckNhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oaXNOdW1iZXJDYXNlLCBzdHJhaWdodEhhc2gpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc0ludDMyKHZhbHVlKSwgdW5zdXJlKHN0cmFpZ2h0SGFz
aCksIHVuc3VyZShzbG93Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmFpZ2h0
SGFzaCwgc2xvd0Nhc2UpOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgICAg
ICBMVmFsdWUga2V5ID0gdmFsdWU7CisgICAgICAgIExWYWx1ZSB0ZW1wID0ga2V5OworICAgICAg
ICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzIpKTsKKyAgICAgICAg
dGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwg
dGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAgdGVtcCA9IGtl
eTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigyMikp
OworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5
ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1f
b3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDEzKSk7CisgICAgICAgIHRlbXAgPSBtX291
dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAg
ICAgICAvLyBrZXkgXj0gKGtleSA+PiA4KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAg
dGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMig4KSk7CisgICAgICAgIGtl
eSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gKGtleSA8PCAz
KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBt
X291dC5jb25zdEludDMyKDMpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7
CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAg
ICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxNSkpOworICAg
ICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4o
a2V5IDw8IDI3KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNo
bCh0ZW1wLCBtX291dC5jb25zdEludDMyKDI3KSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXRO
b3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAv
LyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAg
PSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKKyAgICAgICAga2V5ID0g
bV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmNhc3RUb0ludDMy
KGtleSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hv
cihrZXkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICB2bUNhbGwoSW50MzIs
IG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25KU01hcEhhc2gpLCBtX2NhbGxGcmFtZSwgdmFsdWUp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRJbnQzMihtX291dC5w
aGkoSW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNv
bXBpbGVJc0pTTWFwKCkKKyAgICB7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc2V0Qm9vbGVhbihtX291dC5lcXVhbCgKKyAg
ICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxf
dHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKEpTTWFwVHlw
ZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAg
ICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuYm9vbGVhbkZhbHNl
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92
ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUoY29u
dGludWF0aW9uKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpc0NlbGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBj
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgbV9vdXQu
bG9hZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAg
ICAgICAgICBtX291dC5jb25zdEludDMyKEpTTWFwVHlwZSkpKTsKKyAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbm90Q2VsbFJl
c3VsdCwgY2VsbFJlc3VsdCkpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JO
dWxsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAy
MDQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYyNiw2ICs2MjYsNDkgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXREdW1iVmlydHVhbENhbAogICAgICAgICB9KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBl
cnM6OmpzTWFwSGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKQorewor
ICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+KGtleSA8
PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRj
aCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlucHV0LCBz
Y3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7CisgICAg
eG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAg
bW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEzKSwgc2Ny
YXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOwor
ICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAg
IHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gs
IGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0LCBzY3Jh
dGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAgIGFkZDY0
KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92ZShp
bnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNjcmF0Y2gp
OworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMjcp
OworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigy
NyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlu
cHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRj
aCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAgIHhvcjY0
KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQp
CisgICAgYW5kNjQoVHJ1c3RlZEltbTMyKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+Ojpt
YXgoKSksIGlucHV0QW5kUmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyMDQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6Tm9uZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQganNNYXBI
YXNoKEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gpOwogICAgIAogICAgIENv
ZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0o
KSB7IHJldHVybiBtX3ZtOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZp
c2lvbiAyMDQ1MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2Myw2ICsyNjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWlu
UGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9pc19udW1iZXIpCiAgICAgICAgIERFRklORV9P
UChvcF9pc19zdHJpbmcpCiAgICAgICAgIERFRklORV9PUChvcF9pc19qc2FycmF5KQorICAgICAg
ICBERUZJTkVfT1Aob3BfaXNfanNtYXApCiAgICAgICAgIERFRklORV9PUChvcF9pc19vYmplY3Qp
CiAgICAgICAgIERFRklORV9PUChvcF9qZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX2pm
YWxzZSkKQEAgLTM1Myw2ICszNTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgICAgICAKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm9sb2d1ZSkKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWls
KQorICAgICAgICBERUZJTkVfT1Aob3BfanNtYXBfaGFzaCkKICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTI1LDYgKzUyNSw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9u
Kik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pc19zdHJpbmcoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2lzX2pzYXJyYXkoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBl
bWl0X29wX2lzX2pzbWFwKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pc19v
YmplY3QoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2plcV9udWxsKEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qKTsKQEAg
LTYwNyw2ICs2MDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3Rv
X2luZGV4X3N0cmluZyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVt
aXRfb3BfanNtYXBfaGFzaChJbnN0cnVjdGlvbiopOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3df
b3BfYWRkKEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwog
ICAgICAgICB2b2lkIGVtaXRTbG93X29wX2JpdGFuZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDYgKzI3OCw1NSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9pc19qc2FycmF5KEluc3RydWN0aW9uCiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19qc21hcChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgSnVtcCBpc05vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKworICAg
IGNvbXBhcmU4KEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNl
dCgpKSwgVHJ1c3RlZEltbTMyKEpTTWFwVHlwZSksIHJlZ1QwKTsKKyAgICBlbWl0VGFnQm9vbChy
ZWdUMCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisgICAgaXNOb3RDZWxsLmxpbmsodGhp
cyk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgIGRv
bmUubGluayh0aGlzKTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3Zv
aWQgSklUOjplbWl0X29wX2pzbWFwX2hhc2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgSnVt
cExpc3Qgc3RyYWlnaHRIYXNoOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwor
ICAgIEp1bXBMaXN0IHNsb3dQYXRoOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2g4KEVxdWFs
LCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKFN0cmluZ1R5cGUpKSk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChqdW1wKCkpOworCisg
ICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChicmFuY2hJ
Zk5vdE51bWJlcihyZWdUMCkpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoYnJhbmNoSWZJbnQz
MihKU1ZhbHVlUmVncyhyZWdUMCkpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKKwor
ICAgIHN0cmFpZ2h0SGFzaC5saW5rKHRoaXMpOworCisgICAganNNYXBIYXNoKHJlZ1QwLCByZWdU
MSk7CisgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7CisgICAgZW1pdFB1
dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIHNs
b3dQYXRoLmxpbmsodGhpcyk7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9qc21hcF9oYXNoKTsKKyAgICBzbG93UGF0
aENhbGwuY2FsbCgpOworICAgIGRvbmUubGluayh0aGlzKTsKK30KKwogdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2MCw2ICsxNjAsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkKICAg
ICBTVEFUSUNfQVNTRVJUKEZpbmFsT2JqZWN0VHlwZSA9PSAyMSk7CiAgICAgU1RBVElDX0FTU0VS
VChKU0Z1bmN0aW9uVHlwZSA9PSAyMyk7CiAgICAgU1RBVElDX0FTU0VSVChBcnJheVR5cGUgPT0g
MjkpOworICAgIFNUQVRJQ19BU1NFUlQoSlNNYXBUeXBlID09IDExNyk7CiAgICAgU1RBVElDX0FT
U0VSVChJbnQ4QXJyYXlUeXBlID09IDEwMCk7CiAgICAgU1RBVElDX0FTU0VSVChJbnQxNkFycmF5
VHlwZSA9PSAxMDEpOwogICAgIFNUQVRJQ19BU1NFUlQoSW50MzJBcnJheVR5cGUgPT0gMTAyKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5MCw3ICsxNDkwLDYgQEAgTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYnVnKQogICAgIExMSU5UX0JFR0lOKCk7CiAgICAg
aW50IGRlYnVnSG9va0lEID0gcGNbMV0udS5vcGVyYW5kOwogICAgIHZtLmludGVycHJldGVyLT5k
ZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQpKTsKLSAgICAK
ICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDIwNDUxNykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTk5LDIwICsxMTk5LDEwMCBAQCBfbGxpbnRfb3BfaXNfc3Ry
aW5nOgogICAgIHN0b3JlcSBWYWx1ZUZhbHNlLCBbY2ZyLCB0MiwgOF0KICAgICBkaXNwYXRjaCgz
KQogCi0KLV9sbGludF9vcF9pc19qc2FycmF5OgotICAgIHRyYWNlRXhlY3V0aW9uKCkKK21hY3Jv
IGVtaXRJc0NlcnRhaW5KU1R5cGUodHlwZSkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwg
dDEpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDEsIHQwKQotICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAub3BJc0pTQXJyYXlOb3RD
ZWxsCi0gICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEFycmF5VHlwZSwgdDEKKyAgICBidHFu
eiB0MCwgdGFnTWFzaywgLmpzVHlwZU5vdENlbGwKKyAgICBjYmVxIEpTQ2VsbDo6bV90eXBlW3Qw
XSwgdHlwZSwgdDEKICAgICBvcnEgVmFsdWVGYWxzZSwgdDEKICAgICBzdG9yZXEgdDEsIFtjZnIs
IHQyLCA4XQogICAgIGRpc3BhdGNoKDMpCi0ub3BJc0pTQXJyYXlOb3RDZWxsOgorLmpzVHlwZU5v
dENlbGw6CiAgICAgc3RvcmVxIFZhbHVlRmFsc2UsIFtjZnIsIHQyLCA4XQogICAgIGRpc3BhdGNo
KDMpCitlbmQKKworX2xsaW50X29wX2lzX2pzYXJyYXk6CisgICAgdHJhY2VFeGVjdXRpb24oKQor
ICAgIGVtaXRJc0NlcnRhaW5KU1R5cGUoQXJyYXlUeXBlKQorCisKK19sbGludF9vcF9pc19qc21h
cDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgZW1pdElzQ2VydGFpbkpTVHlwZShKU01hcFR5
cGUpCisKK19sbGludF9vcF9qc21hcF9oYXNoOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCisgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MSwgdDApCisgICAgYnRxbnogdDAsIHRhZ01hc2ssIC5qc01hcEhhc2hOb3RDZWxsCisgICAgYmJu
ZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBTdHJpbmdUeXBlLCAuc3RyYWlnaHRIYXNoCisgICAgY2Fs
bE9wY29kZVNsb3dQYXRoKF9zbG93X3BhdGhfanNtYXBfaGFzaCkKKyAgICBkaXNwYXRjaCgzKQor
LmpzTWFwSGFzaE5vdENlbGw6CisgICAgYnFiIHQwLCB0YWdUeXBlTnVtYmVyLCAub3AxTm90SW50
CisgICAgam1wIC5zdHJhaWdodEhhc2gKKy5vcDFOb3RJbnQ6CisgICAgYnRxeiB0MCwgdGFnVHlw
ZU51bWJlciwgLnN0cmFpZ2h0SGFzaAorICAgICMgRklYTUUgbWFrZSBkb3VibGUgY2FzZSBmYXN0
CisgICAgY2FsbE9wY29kZVNsb3dQYXRoKF9zbG93X3BhdGhfanNtYXBfaGFzaCkKKyAgICBkaXNw
YXRjaCgzKQorLnN0cmFpZ2h0SGFzaDoKKyAgICBtb3ZlIHQwLCB0MQorIyBrZXkgKz0gfihrZXkg
PDwgMzIpOworICAgIGxzaGlmdHAgMzIsIHQxCisgICAgbm90cSB0MQorICAgIGFkZHEgdDEsIHQw
CisjIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDIy
LCB0MQorICAgIHhvcnEgdDEsIHQwCisjIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZSB0
MCwgdDEKKyAgICBsc2hpZnRwIDEzLCB0MQorICAgIG5vdHEgdDEKKyAgICBhZGRxIHQxLCB0MAor
IyBrZXkgXj0gKGtleSA+PiA4KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDgsIHQx
CisgICAgeG9ycSB0MSwgdDAKKyMga2V5ICs9IChrZXkgPDwgMyk7CisgICAgbW92ZSB0MCwgdDEK
KyAgICBsc2hpZnRwIDMsIHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChrZXkgPj4gMTUp
OworICAgIG1vdmUgdDAsIHQxCisgICAgdXJzaGlmdHAgMTUsIHQxCisgICAgeG9ycSB0MSwgdDAK
KyMga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIGxzaGlmdHAgMjcs
IHQxCisgICAgbm90cSB0MQorICAgIGFkZHEgdDEsIHQwCisjIGtleSBePSAoa2V5ID4+IDMxKTsK
KyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDMxLCB0MQorICAgIHhvcnEgdDEsIHQwCisK
KyAgICBhbmRxIDQyOTQ5NjcyOTUsIHQwICMgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkK
KyAgICBvcnEgdGFnVHlwZU51bWJlciwgdDAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwg
dDIpCisgICAgc3RvcmVxIHQwLCBbY2ZyLCB0MiwgOF0KKyAgICBkaXNwYXRjaCgzKQorCisKKyMg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQorIyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMSwgdDIpCisjICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQwKQorIyAgICBidHFu
eiB0MCwgdGFnTWFzaywgLm9wSXNKU0FycmF5Tm90Q2VsbAorIyAgICBjYmVxIEpTQ2VsbDo6bV90
eXBlW3QwXSwgQXJyYXlUeXBlLCB0MQorIyAgICBvcnEgVmFsdWVGYWxzZSwgdDEKKyMgICAgc3Rv
cmVxIHQxLCBbY2ZyLCB0MiwgOF0KKyMgICAgZGlzcGF0Y2goMykKKyMub3BJc0pTQXJyYXlOb3RD
ZWxsOgorIyAgICBzdG9yZXEgVmFsdWVGYWxzZSwgW2NmciwgdDIsIDhdCisjICAgIGRpc3BhdGNo
KDMpCiAKIAogX2xsaW50X29wX2lzX29iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwNDUx
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDYgKzM0Nyw3IEBAIGNvbnN0IE9iamVjdFR5cGUgPSAy
MAogY29uc3QgRmluYWxPYmplY3RUeXBlID0gMjEKIGNvbnN0IEpTRnVuY3Rpb25UeXBlID0gMjMK
IGNvbnN0IEFycmF5VHlwZSA9IDI5Citjb25zdCBKU01hcFR5cGUgPSAxMTcKIAogIyBUaGUgdHlw
ZWQgYXJyYXkgdHlwZXMgbmVlZCB0byBiZSBudW1iZXJlZCBpbiBhIHBhcnRpY3VsYXIgb3JkZXIg
YmVjYXVzZSBvZiB0aGUgbWFudWFsbHkgd3JpdHRlbgogIyBzd2l0Y2ggc3RhdGVtZW50IGluIGdl
dF9ieV92YWwgYW5kIHB1dF9ieV92YWwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS9pbnN0cnVjdGlvbnMucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCShyZXZpc2lvbiAyMDQ1MTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDYgKzQxLDcgQEAgTUFDUk9fSU5TVFJVQ1RJT05TID0KICAgICAgIm5lZ3AiLAog
ICAgICAibmVncSIsCiAgICAgICJub3RpIiwKKyAgICAgIm5vdHEiLAogICAgICAib3JpIiwKICAg
ICAgInJzaGlmdGkiLAogICAgICAidXJzaGlmdGkiLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5nIGNvcHkpCkBAIC05MDEsNiArOTAxLDgg
QEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgICAgICRhc20ucHV0cyAibmVnI3t4ODZTdWZm
aXgoOnF1YWQpfSAje3g4Nk9wZXJhbmRzKDpxdWFkKX0iCiAgICAgICAgIHdoZW4gIm5vdGkiCiAg
ICAgICAgICAgICAkYXNtLnB1dHMgIm5vdCN7eDg2U3VmZml4KDppbnQpfSAje3g4Nk9wZXJhbmRz
KDppbnQpfSIKKyAgICAgICAgd2hlbiAibm90cSIKKyAgICAgICAgICAgICRhc20ucHV0cyAibm90
I3t4ODZTdWZmaXgoOnF1YWQpfSAje3g4Nk9wZXJhbmRzKDpxdWFkKX0iCiAgICAgICAgIHdoZW4g
Im9yaSIKICAgICAgICAgICAgIGhhbmRsZVg4Nk9wKCJvciN7eDg2U3VmZml4KDppbnQpfSIsIDpp
bnQpCiAgICAgICAgIHdoZW4gIm9ycCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25t
ZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgi
CkBAIC05MzMsNCArOTM0LDExIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmFs
X3dpdGgKICAgICBFTkQoKTsKIH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pzbWFwX2hh
c2gpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIHZhbHVlVG9IYXNoID0gT1BfQygyKS5q
c1ZhbHVlKCk7CisgICAgUkVUVVJOKGpzTWFwSGFzaChleGVjLCB2YWx1ZVRvSGFzaCkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyMDQ1MTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAt
MjU4LDYgKzI1OCw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X2kK
IFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRoX3RoaXMpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWRfd2l0aF90aGlzKTsKIFNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbF93aXRoX3RoaXMpOworU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9qc21hcF9oYXNoKTsKIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDcgKzcy
NSw2IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICAgICAg
R2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzU2V0
UHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwg
cHJpdmF0ZUZ1bmNJc1NldCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LlNldEl0ZXJhdG9yUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAx
LCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvciksIERvbnRFbnVtIHwgRG9udERlbGV0
ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLnNldEl0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKCksIEpTRnVuY3Rp
b246OmNyZWF0ZSh2bSwgdGhpcywgMCwgU3RyaW5nKCksIHByaXZhdGVGdW5jU2V0SXRlcmF0b3JO
ZXh0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXNNYXBQcml2YXRl
TmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmluZygpLCBwcml2YXRl
RnVuY0lzTWFwKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXNBcnJh
eVByaXZhdGVOYW1lKCksIGFycmF5Q29uc3RydWN0b3ItPmdldERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+aXNBcnJheSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LmlzQXJyYXlDb25zdHJ1Y3RvclByaXZhdGVOYW1lKCksIHByaXZhdGVGdW5jSXNBcnJheUNvbnN0
cnVjdG9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jb25jYXRNZW1j
cHlQcml2YXRlTmFtZSgpLCBwcml2YXRlRnVuY0NvbmNhdE1lbWNweSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsMTUgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJKU01hcC5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVz
LmgiCisjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJDb3BpZWRCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTTWFw
SXRlcmF0b3IuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVj
dENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCkBAIC0zNyw2ICs0Miw0MiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTTWFwOjpzX2luZm8gPSB7ICJNYXAiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTTWFwKSB9OwogCit2b2lkIEpTTWFwOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit7CisgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgc3RhdGljX2Fzc2VydChCQVNFX1ZFQ1RP
Ul9MRU4gPT0gNCwgImFzc3VtZWQgaGVyZSB0byBiZSBhIHBvd2VyIG9mIDIiKTsKKyAgICBKU0Fy
cmF5KiBhcnJheSA9IEpTQXJyYXk6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGlndW91cyks
IEJBU0VfVkVDVE9SX0xFTik7CisgICAgUkVMRUFTRV9BU1NFUlQoYXJyYXkpOworCisgICAgSlNP
YmplY3QqIGhlYWQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxPYmplY3QtPmdsb2JhbEV4
ZWMoKSk7CisgICAgSlNPYmplY3QqIHRhaWwgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChnbG9iYWxP
YmplY3QtPmdsb2JhbEV4ZWMoKSk7CisgICAgYXV0byBtYWtlU2hhcGUgPSBbJl0gKEpTT2JqZWN0
KiBvYmosIEpTVmFsdWUgbGlzdE5leHQsIEpTVmFsdWUgbGlzdFByZXYpIHsKKyAgICAgICAgLyoK
KyAgICAgICAgbGlzdE5leHQ6IG1hcFRhaWwsCisgICAgICAgIGxpc3RQcmV2OiBtYXBUYWlsLmxp
c3RQcmV2LAorICAgICAgICBrZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAg
ICBkZWxldGVkOiBmYWxzZQorICAgICAgICAqLworCisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgImxpc3ROZXh0IiksIGxpc3ROZXh0LCAwKTsK
KyAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAi
bGlzdFByZXYiKSwgbGlzdFByZXYsIDApOworICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJrZXkiKSwganNOdWxsKCksIDApOworICAgICAgICBv
YmotPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJ2YWx1ZSIpLCBq
c051bGwoKSwgMCk7CisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImRlbGV0ZWQiKSwganNCb29sZWFuKHRydWUpLCAwKTsKKyAgICAgICAgCisg
ICAgfTsKKworICAgIG1ha2VTaGFwZShoZWFkLCB0YWlsLCBqc051bGwoKSk7CisgICAgbWFrZVNo
YXBlKHRhaWwsIGpzTnVsbCgpLCBoZWFkKTsKKworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwSGVhZFByaXZhdGVOYW1lKCksIGhlYWQsIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
Lm1hcFRhaWxQcml2YXRlTmFtZSgpLCB0YWlsLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tYXBUYWJsZVByaXZhdGVOYW1lKCks
IGFycmF5LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5tYXBTaXplUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoMCksIERvbnRFbnVt
KTsKK30KKwogdm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgSlNNYXAq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXAuaAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtOTIsMTYgKzkyLDE4IEBA
IHB1YmxpYzoKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgIHsKICAgICAgICAgSlNNYXAqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNl
bGw8SlNNYXA+KHZtLmhlYXApKSBKU01hcCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtLCBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNl
OwogICAgIH0KIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCop
OworCiAgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3Ry
dWN0dXJlKTsKQEAgLTEyOSw2ICsxMzEsMjcgQEAgcHJpdmF0ZToKICAgICBNYXBEYXRhIG1fbWFw
RGF0YTsKIH07CiAKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBqc01hcEhhc2goRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKSB7CisgICAg
ICAgIGRvdWJsZSBkID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFzdGQ6OmlzbmFu
KGQpKSB7CisgICAgICAgICAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4oZCk7CisgICAgICAg
ICAgICBpZiAoaSA9PSBkKQorICAgICAgICAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoaSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgSlNT
dHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiB3
dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZSh3dGZTdHJpbmcuaW1wbCgpLT5oYXNoKCkpOworICAgIH0KKyAgICB1aW50NjRfdCBy
YXdWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgcmV0dXJuIEpTVmFsdWUoV1RG
OjppbnRIYXNoKHJhd1ZhbHVlKSk7Cit9CisKIH0KIAogI2VuZGlmIC8vICFkZWZpbmVkKEpTTWFw
X2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJh
dG9yLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRl
ICJCdWlsdGluTmFtZXMuaCIKKyNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2luY2x1
ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIK
ICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKQEAgLTQxLDYg
KzQ0LDggQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX21hcC5zZXQodm0sIHRoaXMsIGl0ZXJh
dGVkT2JqZWN0KTsKKyAgICBKU09iamVjdCogbGlzdEhlYWQgPSBqc0Nhc3Q8SlNPYmplY3QqPihp
dGVyYXRlZE9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5tYXBIZWFkUHJpdmF0ZU5hbWUoKSkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSwgbGlzdEhlYWQs
IERvbnRFbnVtKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDkgQEAgZW51
bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBNb2R1bGVFbnZpcm9ubWVudFR5cGUsCiAgICAgUmVn
RXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5cGUsCisgICAgSlNNYXBUeXBlLAogCi0g
ICAgTGFzdEpTQ09iamVjdFR5cGUgPSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVj
dFR5cGUgPSBKU01hcFR5cGUsCiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9
PSBzaXplb2YodWludDhfdCksIHNpemVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjA0NTE3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwzNCArMzIs
NDQgQEAKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5s
aW5lcy5oIgogCisjaW5jbHVkZSAiTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmgiCisKKy8qIFNv
dXJjZSBmb3IgTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBtYXBJdGVyYXRvclBy
b3RvdHlwZVRhYmxlCisgIG5leHQgICAgICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDAK
K0BlbmQKKyovCisKIG5hbWVzcGFjZSBKU0MgewogCi1jb25zdCBDbGFzc0luZm8gTWFwSXRlcmF0
b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIk1hcCBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAs
IENSRUFURV9NRVRIT0RfVEFCTEUoTWFwSXRlcmF0b3JQcm90b3R5cGUpIH07Citjb25zdCBDbGFz
c0luZm8gTWFwSXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIk1hcCBJdGVyYXRvciIsICZC
YXNlOjpzX2luZm8sICZtYXBJdGVyYXRvclByb3RvdHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKE1hcEl0ZXJhdG9yUHJvdG90eXBlKSB9OwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KEV4ZWNTdGF0ZSopOworLy9z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1
bmNOZXh0KEV4ZWNTdGF0ZSopOwogCiB2b2lkIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CisgICAgVU5V
U0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQ
cm90b3R5cGUodGhpcyk7CiAKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0
LCBEb250RW51bSwgMCk7CisgICAgLy9KU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0
LCBEb250RW51bSwgMCk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPnRvU3RyaW5nVGFnU3ltYm9sLCBqc1N0cmluZygmdm0sICJNYXAgSXRlcmF0
b3IiKSwgRG9udEVudW0gfCBSZWFkT25seSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
LXsKLSAgICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVy
YXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghaXRlcmF0b3IpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJ
SUxpdGVyYWwoIkNhbm5vdCBjYWxsIE1hcEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1NYXBJdGVy
YXRvciBvYmplY3QiKSkpOwotCi0gICAgSlNWYWx1ZSByZXN1bHQ7Ci0gICAgaWYgKGl0ZXJhdG9y
LT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsK
LSAgICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVh
dGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsK
LX0KKy8vRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1
bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQorLy97CisvLyAgICBKU01hcEl0ZXJhdG9yKiBp
dGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1Zh
bHVlKCkpOworLy8gICAgaWYgKCFpdGVyYXRvcikKKy8vICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY2Fs
bCBNYXBJdGVyYXRvci5uZXh0KCkgb24gYSBub24tTWFwSXRlcmF0b3Igb2JqZWN0IikpKTsKKy8v
CisvLyAgICBKU1ZhbHVlIHJlc3VsdDsKKy8vICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJh
bWUsIHJlc3VsdCkpCisvLyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVy
YXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKKy8vICAgIGl0ZXJh
dG9yLT5maW5pc2goKTsKKy8vICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0
b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CisvL30KIAog
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0
ZXJhdG9yUHJvdG90eXBlLmgJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDggQEAgY2xhc3MgTWFwSXRlcmF0b3JQcm90b3R5cGUgOiBwdWJsaWMgSlNObwogcHVi
bGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCisgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gSGFzU3RhdGljUHJvcGVydHlUYWJsZSB8IEJh
c2U6OlN0cnVjdHVyZUZsYWdzOworCiAgICAgc3RhdGljIE1hcEl0ZXJhdG9yUHJvdG90eXBlKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgICAgIE1hcEl0ZXJhdG9yUHJvdG90eXBlKiBwcm90b3R5cGUg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNYXBJdGVyYXRvclByb3RvdHlwZT4odm0uaGVh
cCkpIE1hcEl0ZXJhdG9yUHJvdG90eXBlKHZtLCBzdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDQ1
MTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTggQEAgY29uc3QgQ2xhc3NJbmZvIE1hcFByb3Rv
dHlwZTo6c19pbmZvID0gewogLyogU291cmNlIGZvciBNYXBQcm90b3R5cGUubHV0LmgKIEBiZWdp
biBtYXBQcm90b3R5cGVUYWJsZQogICBmb3JFYWNoICAgSlNCdWlsdGluICBEb250RW51bXxGdW5j
dGlvbiAwCisgIGdldCAgICAgICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgc2V0
ICAgICAgIEpTQnVpbHRpbiAgRG9udEVudW18RnVuY3Rpb24gMgorICBkZWxldGUgICAgSlNCdWls
dGluICBEb250RW51bXxGdW5jdGlvbiAxCisgIGhhcyAgICAgICBKU0J1aWx0aW4gIERvbnRFbnVt
fEZ1bmN0aW9uIDEKKyAgbGlzdEFzQXJyYXkgICAgICAgSlNCdWlsdGluICBEb250RW51bXxGdW5j
dGlvbiAwCiBAZW5kCiAqLwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNDbGVhcihFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShFeGVjU3RhdGUqKTsKKy8vc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoRXhlY1N0YXRlKik7Cisv
L3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShF
eGVjU3RhdGUqKTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0dldChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hcFByb3RvRnVuY0hhcyhFeGVjU3RhdGUqKTsKKy8vc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jSGFzKEV4ZWNTdGF0ZSopOwogc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jU2V0KEV4ZWNTdGF0ZSopOwogc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jS2V5cyhFeGVjU3RhdGUq
KTsKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1ZhbHVl
cyhFeGVjU3RhdGUqKTsKQEAgLTY4LDE0ICs3MywxNSBAQCB2b2lkIE1hcFByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHZt
LnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAKLSAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgbWFwUHJvdG9G
dW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBtYXBQcm90b0Z1bmNE
ZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0s
IDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBt
YXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKKyAgICAvL0pTQ19OQVRJVkVfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBtYXBQcm90b0Z1bmND
bGVhciwgRG9udEVudW0sIDApOworICAgIC8vSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgbWFwUHJvdG9GdW5jRGVs
ZXRlLCBEb250RW51bSwgMSk7CisgICAgLy9KU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0s
IDEpOworICAgIC8vSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAgICAvL0pT
Q19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNl
dCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5
c1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jS2V5cywgRG9udEVudW0sIDApOwogICAgIEpTQ19O
QVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jVmFsdWVzLCBEb250RW51
bSwgMCk7CiAKKyAgICAvLyBGSVhNRTogZmluZCBob3cgdG8gdXNlIGJ1aWx0aW5zIGhlcmUuCiAg
ICAgLy8gUHJpdmF0ZSBnZXQgLyBzZXQgb3BlcmF0aW9ucy4KICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5n
ZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKICAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5zZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAy
KTsKQEAgLTEwMiwyMiArMTA4LDIyIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRN
YXAoQ2FsbEYKICAgICByZXR1cm4gbWFwOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEpTTWFw
KiBtYXAgPSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBp
ZiAoIW1hcCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsK
LSAgICBtYXAtPmNsZWFyKGNhbGxGcmFtZSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c1VuZGVmaW5lZCgpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90
b0Z1bmNEZWxldGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgSlNNYXAqIG1hcCA9IGdl
dE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghbWFwKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG1hcC0+cmVtb3ZlKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5hcmd1bWVudCgwKSkpKTsKLX0KKy8vRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKy8veworLy8gICAgSlNNYXAq
IG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworLy8gICAg
aWYgKCFtYXApCisvLyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KTsKKy8vICAgIG1hcC0+Y2xlYXIoY2FsbEZyYW1lKTsKKy8vICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7CisvL30KKworLy9FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKy8veworLy8gICAg
SlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwor
Ly8gICAgaWYgKCFtYXApCisvLyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKy8vICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG1hcC0+cmVt
b3ZlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKy8vfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0dldChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKQEAgLTEyNywxMyArMTMzLDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcC0+Z2V0KGNhbGxGcmFt
ZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hcFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBKU01h
cCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAg
aWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4obWFwLT5oYXMoY2FsbEZyYW1l
LCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOwotfQorLy9FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIG1hcFByb3RvRnVuY0hhcyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKy8veworLy8gICAg
SlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwor
Ly8gICAgaWYgKCFtYXApCisvLyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKKy8vICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG1hcC0+aGFz
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKKy8vfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
IHsKQEAgLTE3NywxMSArMTgzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQ
cm90b0Z1bgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRvcjo6Y3JlYXRl
KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1h
cEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXkpKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihqc0R5bmFtaWNDYXN0PEpT
TWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7
CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmgJKHJldmlzaW9uIDIwNDUxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIHByaXZhdGU6
CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKik7
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3IoRXhl
Y1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRl
cmF0b3JOZXh0KEV4ZWNTdGF0ZSopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286517</attachid>
            <date>2016-08-19 19:27:06 -0700</date>
            <delta_ts>2016-08-24 20:43:38 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>89638</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShub25leGlzdGVudCkK
KysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNyBAQAorbG9hZCgiZHJpdmVyLmpzIik7Citsb2FkKCJyZXN1bHRzLmpzIik7
Citsb2FkKCJzdGF0cy5qcyIpOworCitsb2FkKCJjbGlfYWlyLmpzIik7Citsb2FkKCJjbGlfYmFz
aWMuanMiKTsKK2xvYWQoImdsdWUuanMiKTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2Ft
cGxlQmVuY2gvY2xpX2Fpci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNh
bXBsZUJlbmNoL2NsaV9haXIuanMJKG5vbmV4aXN0ZW50KQorKysgUGVyZm9ybWFuY2VUZXN0cy9F
UzZTYW1wbGVCZW5jaC9jbGlfYWlyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0
IjsKKworbGV0IF9fbG9hZGVkQWlyID0gZmFsc2U7CitpZiAoIV9fbG9hZGVkQWlyKSB7CisgICAg
X19sb2FkZWRBaXIgPSB0cnVlOworCisgICAgbG9hZCgiQWlyL3N5bWJvbHMuanMiKTsKKyAgICBs
b2FkKCJBaXIvdG1wX2Jhc2UuanMiKTsKKyAgICBsb2FkKCJBaXIvYXJnLmpzIik7CisgICAgbG9h
ZCgiQWlyL2Jhc2ljX2Jsb2NrLmpzIik7CisgICAgbG9hZCgiQWlyL2NvZGUuanMiKTsKKyAgICBs
b2FkKCJBaXIvZnJlcXVlbnRlZF9ibG9jay5qcyIpOworICAgIGxvYWQoIkFpci9pbnN0LmpzIik7
CisgICAgbG9hZCgiQWlyL29wY29kZS5qcyIpOworICAgIGxvYWQoIkFpci9yZWcuanMiKTsKKyAg
ICBsb2FkKCJBaXIvc3RhY2tfc2xvdC5qcyIpOworICAgIGxvYWQoIkFpci90bXAuanMiKTsKKyAg
ICBsb2FkKCJBaXIvdXRpbC5qcyIpOworICAgIGxvYWQoIkFpci9jdXN0b20uanMiKTsKKyAgICBs
b2FkKCJBaXIvbGl2ZW5lc3MuanMiKTsKKyAgICBsb2FkKCJBaXIvaW5zZXJ0aW9uX3NldC5qcyIp
OworICAgIGxvYWQoIkFpci9hbGxvY2F0ZV9zdGFjay5qcyIpOworICAgIGxvYWQoIkFpci9wYXls
b2FkLWdiZW11LWV4ZWN1dGVJdGVyYXRpb24uanMiKTsKKyAgICBsb2FkKCJBaXIvcGF5bG9hZC1p
bWFnaW5nLWdhdXNzaWFuLWJsdXItZ2F1c3NpYW5CbHVyLmpzIik7CisgICAgbG9hZCgiQWlyL3Bh
eWxvYWQtYWlyanMtQUNMajhDLmpzIik7CisgICAgbG9hZCgiQWlyL3BheWxvYWQtdHlwZXNjcmlw
dC1zY2FuSWRlbnRpZmllci5qcyIpOworICAgIGxvYWQoIkFpci9iZW5jaG1hcmsuanMiKTsKK30K
KworZnVuY3Rpb24gcnVuKCkgeworICAgIHZhciByZXN1bHRzID0gW107CisgICAgdmFyIGJlbmNo
bWFyayA9IG5ldyBBaXJCZW5jaG1hcmsoKTsKKyAgICB2YXIgbnVtSXRlcmF0aW9ucyA9IDIwMDsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICB2
YXIgYmVmb3JlID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlv
bigpOworICAgICAgICB2YXIgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOworICAgICAgICByZXN1bHRz
LnB1c2goYWZ0ZXIgLSBiZWZvcmUpOworICAgIH0KKworICAgIHJlcG9ydFJlc3VsdChyZXN1bHRz
KTsKK30KKworY29uc3QgQWlyQmVuY2htYXJrUnVubmVyID0geworICAgIHJ1bjogcnVuLAorICAg
IG5hbWU6ICJBaXIiLAorICAgIGNlbGxzOiB7CisgICAgICAgIC8vZmlyc3RJdGVyYXRpb246IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJBaXJGaXJzdEl0ZXJhdGlvbiIpLAorICAgICAgICAvL2F2
ZXJhZ2VXb3JzdENhc2U6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJBaXJBdmVyYWdlV29yc3RD
YXNlIiksCisgICAgICAgIC8vc3RlYWR5U3RhdGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJB
aXJTdGVhZHlTdGF0ZSIpLAorICAgICAgICAvL21lc3NhZ2U6IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJBaXJNZXNzYWdlIikKKyAgICB9Cit9OworCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0VT
NlNhbXBsZUJlbmNoL2NsaV9iYXNpYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3Rz
L0VTNlNhbXBsZUJlbmNoL2NsaV9iYXNpYy5qcwkobm9uZXhpc3RlbnQpCisrKyBQZXJmb3JtYW5j
ZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaV9iYXNpYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDM0IEBACitsb2FkKCJCYXNpYy9hc3QuanMiKTsKK2xvYWQoIkJhc2ljL2Jhc2ljLmpzIik7
Citsb2FkKCJCYXNpYy9jYXNlbGVzc19tYXAuanMiKTsKK2xvYWQoIkJhc2ljL2xleGVyLmpzIik7
Citsb2FkKCJCYXNpYy9udW1iZXIuanMiKTsKK2xvYWQoIkJhc2ljL3BhcnNlci5qcyIpOworbG9h
ZCgiQmFzaWMvcmFuZG9tLmpzIik7Citsb2FkKCJCYXNpYy9zdGF0ZS5qcyIpOworbG9hZCgiQmFz
aWMvdXRpbC5qcyIpOworbG9hZCgiQmFzaWMvYmVuY2htYXJrLmpzIik7CisKK2Z1bmN0aW9uIHJ1
bigpIHsKKyAgICB2YXIgcmVzdWx0cyA9IFtdOworICAgIHZhciBiZW5jaG1hcmsgPSBuZXcgQmFz
aWNCZW5jaG1hcmsoKTsKKyAgICB2YXIgbnVtSXRlcmF0aW9ucyA9IDIwMDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG51bUl0ZXJhdGlvbnM7ICsraSkgeworICAgICAgICB2YXIgYmVmb3JlID0g
Y3VycmVudFRpbWUoKTsKKyAgICAgICAgYmVuY2htYXJrLnJ1bkl0ZXJhdGlvbigpOworICAgICAg
ICB2YXIgYWZ0ZXIgPSBjdXJyZW50VGltZSgpOworICAgICAgICByZXN1bHRzLnB1c2goYWZ0ZXIg
LSBiZWZvcmUpOworICAgIH0KKyAgICByZXBvcnRSZXN1bHQocmVzdWx0cyk7Cit9CisKK2NvbnN0
IEJhc2ljQmVuY2htYXJrUnVubmVyID0geworICAgIHJ1bjogcnVuLAorICAgIG5hbWU6ICJCYXNp
YyIsCisgICAgY2VsbHM6IHsKKyAgICAgICAgLy9maXJzdEl0ZXJhdGlvbjogZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIkJhc2ljRmlyc3RJdGVyYXRpb24iKSwKKyAgICAgICAgLy9hdmVyYWdlV29y
c3RDYXNlOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiQmFzaWNBdmVyYWdlV29yc3RDYXNlIiks
CisgICAgICAgIC8vc3RlYWR5U3RhdGU6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJCYXNpY1N0
ZWFkeVN0YXRlIiksCisgICAgICAgIC8vbWVzc2FnZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
IkJhc2ljTWVzc2FnZSIpCisgICAgfQorfTsKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2Ft
cGxlQmVuY2gvZHJpdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2Ft
cGxlQmVuY2gvZHJpdmVyLmpzCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0VTNlNhbXBsZUJlbmNoL2RyaXZlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBA
QAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwotInVzZSBzdHJpY3QiOwor
Ly8idXNlIHN0cmljdCI7CiAKIGNsYXNzIERyaXZlciB7CiAgICAgY29uc3RydWN0b3IodHJpZ2dl
ckNlbGwsIHRyaWdnZXJMaW5rLCBtYWdpY0NlbGwsIHN1bW1hcnlDZWxsLCBrZXkpCkBAIC0zNCw3
ICszNCw3IEBAIGNsYXNzIERyaXZlciB7CiAgICAgICAgIHRoaXMuX3N1bW1hcnkgPSBuZXcgU3Rh
dHMoc3VtbWFyeUNlbGwpOwogICAgICAgICB0aGlzLl9rZXkgPSBrZXk7CiAgICAgICAgIHRoaXMu
X2hhZEVycm9ycyA9IGZhbHNlOwotICAgICAgICB3aW5kb3dba2V5XSA9IHRoaXM7CisgICAgICAg
IC8vd2luZG93W2tleV0gPSB0aGlzOwogICAgIH0KICAgICAKICAgICBhZGRCZW5jaG1hcmsoYmVu
Y2htYXJrKQpAQCAtNTcsNiArNTcsNyBAQCBjbGFzcyBEcml2ZXIgewogICAgIAogICAgIHJlcG9y
dFJlc3VsdCguLi5hcmdzKQogICAgIHsKKyAgICAgICAgcHJpbnQodGhpcy5fYmVuY2htYXJrLm5h
bWUpOwogICAgICAgICB0aGlzLl9iZW5jaG1hcmtzLmdldCh0aGlzLl9iZW5jaG1hcmspLnJlcG9y
dFJlc3VsdCguLi5hcmdzKTsKICAgICAgICAgdGhpcy5fcmVjb21wdXRlU3VtbWFyeSgpOwogICAg
ICAgICB0aGlzLl9pdGVyYXRlKCk7CkBAIC0xMTcsOSArMTE4LDEwIEBAIGNsYXNzIERyaXZlciB7
CiAgICAgICAgIHRoaXMuX2JlbmNobWFyayA9IHRoaXMuX2l0ZXJhdG9yID8gdGhpcy5faXRlcmF0
b3IubmV4dCgpLnZhbHVlIDogbnVsbDsKICAgICAgICAgaWYgKCF0aGlzLl9iZW5jaG1hcmspIHsK
ICAgICAgICAgICAgIGlmICghdGhpcy5fbnVtSXRlcmF0aW9ucykgewotICAgICAgICAgICAgICAg
IHRoaXMuX3RyaWdnZXJDZWxsLmlubmVySFRNTCA9Ci0gICAgICAgICAgICAgICAgICAgICh0aGlz
Ll9oYWRFcnJvcnMgPyAiRmFpbHVyZXMgZW5jb3VudGVyZWQhIiA6ICJTdWNjZXNzISIpICsKLSAg
ICAgICAgICAgICAgICAgICAgYCA8YSBocmVmPSIke3RoaXMuX3RyaWdnZXJMaW5rfSI+UmVzdGFy
dCBCZW5jaG1hcms8L2E+YDsKKyAgICAgICAgICAgICAgICBwcmludCh0aGlzLl9oYWRFcnJvcnMg
PyAiRmFpbHVyZXMgZW5jb3VudGVyZWQhIiA6ICJTdWNjZXNzISIpOworICAgICAgICAgICAgICAg
IC8vdGhpcy5fdHJpZ2dlckNlbGwuaW5uZXJIVE1MID0KKyAgICAgICAgICAgICAgICAvLyAgICAg
KworICAgICAgICAgICAgICAgIC8vICAgIGAgPGEgaHJlZj0iJHt0aGlzLl90cmlnZ2VyTGlua30i
PlJlc3RhcnQgQmVuY2htYXJrPC9hPmA7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgdGhpcy5fbnVtSXRlcmF0aW9ucy0tOwpAQCAtMTMwLDMxICsx
MzIsMzkgQEAgY2xhc3MgRHJpdmVyIHsKICAgICAgICAgCiAgICAgICAgIHRoaXMuX2JlbmNobWFy
a3MuZ2V0KHRoaXMuX2JlbmNobWFyaykucmVwb3J0UnVubmluZygpOwogICAgICAgICAKLSAgICAg
ICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4geworICAgICAgICBsZXQgYmVuY2htYXJrID0gdGhp
cy5fYmVuY2htYXJrOworICAgICAgICBQcm9taXNlLnJlc29sdmUoMjApLnRoZW4oKCkgPT4gewog
ICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1J1bm5pbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICB0aGlzLl9tYWdpY0NlbGwuY29udGVudERvY3Vt
ZW50LmJvZHkudGV4dENvbnRlbnQgPSAiIjsKLSAgICAgICAgICAgIHRoaXMuX21hZ2ljQ2VsbC5j
b250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiPGlmcmFtZSBpZD1cIm1hZ2ljRnJhbWVc
IiBmcmFtZWJvcmRlcj1cIjBcIj4iOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBsZXQgbWFn
aWNGcmFtZSA9IHRoaXMuX21hZ2ljQ2VsbC5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im1hZ2ljRnJhbWUiKTsKLSAgICAgICAgICAgIG1hZ2ljRnJhbWUuY29udGVudERvY3VtZW50Lm9w
ZW4oKTsKLSAgICAgICAgICAgIG1hZ2ljRnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKAotICAg
ICAgICAgICAgICAgIGA8IURPQ1RZUEUgaHRtbD48aGVhZD48dGl0bGU+YmVuY2htYXJrIHBheWxv
YWQ8L3RpdGxlPjwvaGVhZD48Ym9keT48c2NyaXB0PmAgKwotICAgICAgICAgICAgICAgIGB3aW5k
b3cub25lcnJvciA9IHRvcC4ke3RoaXMuX2tleX0ucmVwb3J0RXJyb3I7XG5gICsKLSAgICAgICAg
ICAgICAgICBgZnVuY3Rpb24gcmVwb3J0UmVzdWx0KClcbmAgKwotICAgICAgICAgICAgICAgIGB7
XG5gICsKLSAgICAgICAgICAgICAgICBgICAgIHZhciBkcml2ZXIgPSB0b3AuJHt0aGlzLl9rZXl9
O1xuYCArCi0gICAgICAgICAgICAgICAgYCAgICBkcml2ZXIucmVwb3J0UmVzdWx0LmFwcGx5KGRy
aXZlciwgYXJndW1lbnRzKTtcbmAgKwotICAgICAgICAgICAgICAgIGB9XG5gICsKLSAgICAgICAg
ICAgICAgICBgPC9zY3JpcHQ+XG5gICsKLSAgICAgICAgICAgICAgICBgJHt0aGlzLl9iZW5jaG1h
cmsuY29kZX08L2JvZHk+PC9odG1sPmApOwotICAgICAgICB9LCAxMDApOworICAgICAgICAgICAg
YmVuY2htYXJrLnJ1bigpOworICAgICAgICB9KTsKKyAgICAgICAgLy93aW5kb3cuc2V0VGltZW91
dCgoKSA9PiB7CisgICAgICAgIC8vICAgIGlmICghdGhpcy5faXNSdW5uaW5nKQorICAgICAgICAv
LyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyAgICAKKyAgICAgICAgLy8gICAgdGhpcy5fbWFn
aWNDZWxsLmNvbnRlbnREb2N1bWVudC5ib2R5LnRleHRDb250ZW50ID0gIiI7CisgICAgICAgIC8v
ICAgIHRoaXMuX21hZ2ljQ2VsbC5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiPGlm
cmFtZSBpZD1cIm1hZ2ljRnJhbWVcIiBmcmFtZWJvcmRlcj1cIjBcIj4iOworICAgICAgICAvLyAg
ICAKKyAgICAgICAgLy8gICAgbGV0IG1hZ2ljRnJhbWUgPSB0aGlzLl9tYWdpY0NlbGwuY29udGVu
dERvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJtYWdpY0ZyYW1lIik7CisgICAgICAgIC8vICAgIG1h
Z2ljRnJhbWUuY29udGVudERvY3VtZW50Lm9wZW4oKTsKKyAgICAgICAgLy8gICAgbWFnaWNGcmFt
ZS5jb250ZW50RG9jdW1lbnQud3JpdGUoCisgICAgICAgIC8vICAgICAgICBgPCFET0NUWVBFIGh0
bWw+PGhlYWQ+PHRpdGxlPmJlbmNobWFyayBwYXlsb2FkPC90aXRsZT48L2hlYWQ+PGJvZHk+PHNj
cmlwdD5gICsKKyAgICAgICAgLy8gICAgICAgIGB3aW5kb3cub25lcnJvciA9IHRvcC4ke3RoaXMu
X2tleX0ucmVwb3J0RXJyb3I7XG5gICsKKyAgICAgICAgLy8gICAgICAgIGBmdW5jdGlvbiByZXBv
cnRSZXN1bHQoKVxuYCArCisgICAgICAgIC8vICAgICAgICBge1xuYCArCisgICAgICAgIC8vICAg
ICAgICBgICAgIHZhciBkcml2ZXIgPSB0b3AuJHt0aGlzLl9rZXl9O1xuYCArCisgICAgICAgIC8v
ICAgICAgICBgICAgIGRyaXZlci5yZXBvcnRSZXN1bHQuYXBwbHkoZHJpdmVyLCBhcmd1bWVudHMp
O1xuYCArCisgICAgICAgIC8vICAgICAgICBgfVxuYCArCisgICAgICAgIC8vICAgICAgICBgPC9z
Y3JpcHQ+XG5gICsKKyAgICAgICAgLy8gICAgICAgIGAke3RoaXMuX2JlbmNobWFyay5jb2RlfTwv
Ym9keT48L2h0bWw+YCk7CisgICAgICAgIC8vfSwgMTAwKTsKICAgICB9CiAgICAgCiAgICAgX3Vw
ZGF0ZUl0ZXJhdGlvbnMoKQogICAgIHsKLSAgICAgICAgdGhpcy5fdHJpZ2dlckNlbGwuaW5uZXJI
VE1MID0gIlJ1bm5pbmcuLi4gKCIgKyAodGhpcy5fbnVtSXRlcmF0aW9ucyArIDEpICsgIiB0byBn
bykiOworICAgICAgICAvL3RoaXMuX3RyaWdnZXJDZWxsLmlubmVySFRNTCA9ICJSdW5uaW5nLi4u
ICgiICsgKHRoaXMuX251bUl0ZXJhdGlvbnMgKyAxKSArICIgdG8gZ28pIjsKKyAgICAgICAgcHJp
bnQoIlJ1bm5pbmcuLi4gKCIgKyAodGhpcy5fbnVtSXRlcmF0aW9ucyArIDEpICsgIiB0byBnbyki
KTsKICAgICB9CiB9CiAKSW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvZ2x1
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2dsdWUu
anMJKHJldmlzaW9uIDIwNDY1MikKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gv
Z2x1ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDE2IEBACiAidXNlIHN0cmljdCI7
CiAKIGNvbnN0IGRyaXZlciA9IG5ldyBEcml2ZXIoCi0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRyaWdnZXIiKSwKKyAgICB0aGlzLmRvY3VtZW50ID8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInRyaWdnZXIiKSA6IG51bGwsCiAgICAgImRyaXZlci5zdGFydCgxMCkiLAotICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJtYWdpYyIpLAotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJHZW9tZWFuIiksCisgICAgdGhpcy5kb2N1bWVudCA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJtYWdpYyIpIDogbnVsbCwKKyAgICB0aGlzLmRvY3VtZW50ID8gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIkdlb21lYW4iKSA6IG51bGwsCiAgICAgInNhbXBsZUJlbmNoIik7CiAKLWRyaXZlci5h
ZGRCZW5jaG1hcmsoQWlyQmVuY2htYXJrKTsKLWRyaXZlci5hZGRCZW5jaG1hcmsoQmFzaWNCZW5j
aG1hcmspOworLy9kcml2ZXIuYWRkQmVuY2htYXJrKEFpckJlbmNobWFya1J1bm5lcik7Citkcml2
ZXIuYWRkQmVuY2htYXJrKEJhc2ljQmVuY2htYXJrUnVubmVyKTsKK2RyaXZlci5zdGFydCg1KTsK
K2Z1bmN0aW9uIHJlcG9ydFJlc3VsdCguLi5hcmdzKSB7CisgICAgZHJpdmVyLnJlcG9ydFJlc3Vs
dCguLi5hcmdzKTsKK30KKy8vZHJpdmVyLmFkZEJlbmNobWFyayhCYXNpY0JlbmNobWFyayk7Cklu
ZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL3Jlc3VsdHMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9yZXN1bHRzLmpzCShyZXZpc2lv
biAyMDQ2NTIpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL3Jlc3VsdHMuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDEyICs0MiwxMiBAQCBjbGFzcyBSZXN1bHRzIHsKICAgICAK
ICAgICByZXBvcnRSdW5uaW5nKCkKICAgICB7Ci0gICAgICAgIHRoaXMuX2JlbmNobWFyay5jZWxs
cy5tZXNzYWdlLmlubmVySFRNTCA9ICJSdW5uaW5nLi4uIjsKKyAgICAgICAgLy90aGlzLl9iZW5j
aG1hcmsuY2VsbHMubWVzc2FnZS5pbm5lckhUTUwgPSAiUnVubmluZy4uLiI7CiAgICAgfQogICAg
IAogICAgIHJlcG9ydERvbmUoKQogICAgIHsKLSAgICAgICAgdGhpcy5fYmVuY2htYXJrLmNlbGxz
Lm1lc3NhZ2UuaW5uZXJIVE1MID0gIiI7CisgICAgICAgIC8vdGhpcy5fYmVuY2htYXJrLmNlbGxz
Lm1lc3NhZ2UuaW5uZXJIVE1MID0gIiI7CiAgICAgfQogICAgIAogICAgIHJlcG9ydFJlc3VsdCh0
aW1lcykKQEAgLTk5LDcgKzk5LDcgQEAgY2xhc3MgUmVzdWx0cyB7CiAgICAgewogICAgICAgICBm
b3IgKGxldCBzdWJSZXN1bHQgb2YgUmVzdWx0cy5zdWJSZXN1bHRzKQogICAgICAgICAgICAgdGhp
c1tzdWJSZXN1bHRdLnJlcG9ydFJlc3VsdChTdGF0cy5lcnJvcik7Ci0gICAgICAgIHRoaXMuX2Jl
bmNobWFyay5jZWxscy5tZXNzYWdlLmlubmVySFRNTCA9IHVybCArICI6IiArIGxpbmVOdW1iZXIg
KyAiOiAiICsgbWVzc2FnZTsKKyAgICAgICAgLy90aGlzLl9iZW5jaG1hcmsuY2VsbHMubWVzc2Fn
ZS5pbm5lckhUTUwgPSB1cmwgKyAiOiIgKyBsaW5lTnVtYmVyICsgIjogIiArIG1lc3NhZ2U7CiAg
ICAgfQogfQogCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL3N0YXRzLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvc3RhdHMuanMJ
KHJldmlzaW9uIDIwNDY1MikKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvc3Rh
dHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE2ICs5MCwyMyBAQCBjbGFzcyBTdGF0cyB7CiAg
ICAgICAgIGlmIChyZXN1bHQubWVhbiAhPSByZXN1bHQubWVhbikKICAgICAgICAgICAgIHJldHVy
biAiRVJST1IiOwogICAgICAgICAKLSAgICAgICAgaWYgKCJpbnRlcnZhbCIgaW4gcmVzdWx0KQot
ICAgICAgICAgICAgcmV0dXJuIGAke3Jlc3VsdC5tZWFuLnRvRml4ZWQoMil9IG1zICZwbHVzbW47
ICR7cmVzdWx0LmludGVydmFsLnRvRml4ZWQoMil9IG1zYDsKKyAgICAgICAgaWYgKCJpbnRlcnZh
bCIgaW4gcmVzdWx0KSB7CisgICAgICAgICAgICByZXR1cm4gYCR7cmVzdWx0Lm1lYW4udG9GaXhl
ZCgyKX0gbXMgKz0gJHtyZXN1bHQuaW50ZXJ2YWwudG9GaXhlZCgyKX0gbXNgOworICAgICAgICB9
CiAKICAgICAgICAgcmV0dXJuIGAke3Jlc3VsdC5tZWFuLnRvRml4ZWQoMil9IG1zYDsKICAgICB9
CiAgICAgCiAgICAgX3VwZGF0ZSgpCiAgICAgewotICAgICAgICBpZiAodGhpcy5fY2VsbCkKKyAg
ICAgICAgaWYgKHRoaXMud2luZG93ICYmIHRoaXMuX2NlbGwpIHsKKyAgICAgICAgICAgIHRoaXMu
X21hZ2ljQ2VsbC5jb250ZW50RG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCA9ICIiOworICAgICAg
ICAgICAgdGhpcy5fbWFnaWNDZWxsLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCA9ICI8
aWZyYW1lIGlkPVwibWFnaWNGcmFtZVwiIGZyYW1lYm9yZGVyPVwiMFwiPiI7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGxldCBtYWdpY0ZyYW1lID0gdGhpcy5fbWFnaWNDZWxsLmNvbnRlbnRE
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWFnaWNGcmFtZSIpOwogICAgICAgICAgICAgdGhpcy5f
Y2VsbC5pbm5lckhUTUwgPSB0aGlzLnRvU3RyaW5nKCk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgcHJpbnQodGhpcy50b1N0cmluZygpKTsKICAgICB9CiB9CiAKSW5kZXg6IFBlcmZvcm1h
bmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFyay5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQ
ZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci9iZW5jaG1hcmsuanMJKHJldmlzaW9u
IDIwNDY1MikKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL2JlbmNobWFy
ay5qcwkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAidXNlIHN0cmljdCI7
CiAKLWNsYXNzIEJlbmNobWFyayB7CitjbGFzcyBBaXJCZW5jaG1hcmsgewogICAgIGNvbnN0cnVj
dG9yKHZlcmJvc2UgPSAwKQogICAgIHsKICAgICAgICAgdGhpcy5fdmVyYm9zZSA9IHZlcmJvc2U7
CkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Fpci91dGlsLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL3V0aWwuanMJKHJl
dmlzaW9uIDIwNDY1MikKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvQWlyL3V0
aWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw3ICsxNjksNyBAQCBmdW5jdGlvbiBidWJibGVT
b3J0KGFycmF5LCBsZXNzVGhhbikKICAgICB9CiB9CiAKLWxldCBjdXJyZW50VGltZTsKK3ZhciBj
dXJyZW50VGltZTsKIGlmICh0aGlzLnBlcmZvcm1hbmNlICYmIHBlcmZvcm1hbmNlLm5vdykKICAg
ICBjdXJyZW50VGltZSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCkgfTsK
IGVsc2UgaWYgKHRoaXMucHJlY2lzZVRpbWUpCkluZGV4OiBQZXJmb3JtYW5jZVRlc3RzL0VTNlNh
bXBsZUJlbmNoL0Jhc2ljL2JlbmNobWFyay5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBQZXJmb3JtYW5jZVRl
c3RzL0VTNlNhbXBsZUJlbmNoL0Jhc2ljL2JlbmNobWFyay5qcwkocmV2aXNpb24gMjA0NjUyKQor
KysgUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9CYXNpYy9iZW5jaG1hcmsuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFz
cyBCZW5jaG1hcmsgeworY2xhc3MgQmFzaWNCZW5jaG1hcmsgewogICAgIGNvbnN0cnVjdG9yKHZl
cmJvc2UgPSAwKQogICAgIHsKICAgICAgICAgdGhpcy5fdmVyYm9zZSA9IHZlcmJvc2U7CkluZGV4
OiBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Jhc2ljL3V0aWwuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVCZW5jaC9CYXNpYy91dGlsLmpzCShyZXZp
c2lvbiAyMDQ2NTIpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL0Jhc2ljL3V0
aWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3Qi
OwogCi1sZXQgY3VycmVudFRpbWU7Cit2YXIgY3VycmVudFRpbWU7CiBpZiAodGhpcy5wZXJmb3Jt
YW5jZSAmJiBwZXJmb3JtYW5jZS5ub3cpCiAgICAgY3VycmVudFRpbWUgPSBmdW5jdGlvbigpIHsg
cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpIH07CiBlbHNlIGlmICh0aGlzLnByZWNpc2VUaW1lKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9u
IDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3
b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5Niw3IEBAIEphdmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NP
VVJDRVMgPSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9JbnRl
cm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRp
bnMvSXRlcmF0b3JQcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5z
L01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlu
cy9NYXBQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL01vZHVs
ZUxvYWRlclByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTnVt
YmVyQ29uc3RydWN0b3IuanMgXApAQCAtMTQ2LDYgKzE0Nyw3IEBAIE9CSkVDVF9MVVRfSEVBREVS
UyA9IFwKICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBKU1Byb21pc2VQcm90b3R5cGUubHV0
LmggXAogICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBNYXBJdGVyYXRvclBy
b3RvdHlwZS5sdXQuaCBcCiAgICAgTWFwUHJvdG90eXBlLmx1dC5oIFwKICAgICBNb2R1bGVMb2Fk
ZXJQcm90b3R5cGUubHV0LmggXAogICAgIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTIwMCw3ICsxMjAwLDcgQEAKIAkJNTNGNDBFOEQxRDU5MDFGMjAw
OTlBMUI2IC8qIFdBU01QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggKi87
IH07CiAJCTUzRjQwRThGMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4RTFE
NTkwMjgyMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuY3BwICovOyB9OwogCQk1M0Y0MEU5
MTFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9wcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMu
aCAqLzsgfTsKLSAgICAgICAgICAgICAgICA1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FT
TUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICov
OyB9OworCQk1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkyMUQ1
QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovOyB9OwogCQk1M0Y0MEU5NTFE
NUE3QUVGMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdB
U01Nb2R1bGVQYXJzZXIuaCAqLzsgfTsKIAkJNTNGNDBFOTcxRDVBN0JFQzAwOTlBMUI2IC8qIFdB
U01Nb2R1bGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNGNDBFOTYxRDVBN0JFQzAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3Bw
ICovOyB9OwogCQk1M0Y2QkY2RDFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFs
bG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1M0Y2QkY2QzFDM0YwNjBBMDBGNDFFNUQgLyogSW50ZXJuYWxGdW5jdGlvbkFsbG9j
YXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTMzOTEsNyArMzM5MSw3IEBACiAJCTUzRjQwRThDMUQ1OTAxRjIwMDk5QTFCNiAv
KiBXQVNNUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01QYXJz
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOEUxRDU5MDI4MjAwOTlB
MUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdBU01CM0lSR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTNGNDBFOTAxRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU9wcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotICAgICAgICAgICAgICAgIDUzRjQwRTkyMUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdl
bmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXQVNNQjNJUkdlbmVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1M0Y0MEU5MjFENUE0QUIzMDA5
OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0FTTUIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTNGNDBFOTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0FTTU1vZHVsZVBhcnNlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1M0Y0MEU5NjFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBh
cnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNTW9kdWxl
UGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNkJGNkMxQzNGMDYw
QTAwRjQxRTVEIC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRlcm5hbEZ1bmN0aW9uQWxsb2NhdGlvblByb2Zp
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM1MjUsNiArMzUyNSw3IEBACiAJ
CTcyQUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkFBRjdD
QzFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3QjI1Q0IyQzMwOTRBOTJBMzhFMURC
MyAvKiBKU01vZHVsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U01vZHVsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTAxMDczNzFE
NjY5NzRDMDA1ODA0MjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7
IHBhdGggPSBNYXBJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVBY2Nlc3MuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5l
QWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUFjY2Vzcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTE2MERCQjFDOEUzRUM4MDA4QzA4NUEg
LyogUHJveHlSZXZva2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJveHlSZXZva2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTU2Niw3ICs1
NTY3LDcgQEAKIAkJCQk1M0Y0MEU5MDFENTkwMzAyMDA5OUExQjYgLyogV0FTTU9wcy5oICovLAog
CQkJCTdCQzU0N0QyMUI2OTU5OUIwMDk1OUI1OCAvKiBXQVNNRm9ybWF0LmggKi8sCiAJCQkJNTNG
NDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmNwcCAqLywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdB
U01CM0lSR2VuZXJhdG9yLmggKi8sCisJCQkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdB
U01CM0lSR2VuZXJhdG9yLmggKi8sCiAJCQkJNTNGNDBFOEExRDU5MDFCQjAwOTlBMUI2IC8qIFdB
U01GdW5jdGlvblBhcnNlci5oICovLAogCQkJCTUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAvKiBX
QVNNTW9kdWxlUGFyc2VyLmNwcCAqLywKIAkJCQk1M0Y0MEU5NDFENUE3QUVGMDA5OUExQjYgLyog
V0FTTU1vZHVsZVBhcnNlci5oICovLApAQCAtNzAxMyw2ICs3MDE0LDcgQEAKIAkJCQlFMzNGNTA4
ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8sCiAJ
CQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAog
CQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBNYXBQcm90b3R5cGUuanMgKi8sCisJCQkJ
NzkwMTA3MzcxRDY2OTc0QzAwNTgwNDIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzICovLAog
CQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBNb2R1bGVMb2FkZXJQcm90b3R5cGUuanMg
Ki8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3IC8qIE51bWJlckNvbnN0cnVjdG9yLmpz
ICovLAogCQkJCUExNURFNUM1MUMwRkJGOEQwMDg5MTMzRCAvKiBOdW1iZXJQcm90b3R5cGUuanMg
Ki8sCkBAIC03OTU2LDcgKzc5NTgsNyBAQAogCQkJCTBGQjU0Njc3MTRGNTlCNUMwMDJDMjk4OSAv
KiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQjAx
QkQ1OTk0RTAwRjQ1NzVDIC8qIGxhenl3cml0ZXIucHkgaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQzMTBFMTZGNUNEMDBCMzQ0NjAgLyogTGV4ZXIuaCBpbiBIZWFkZXJzICovLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA1M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIz
SVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTUzRjQwRTkzMUQ1QTRBQjMwMDk5QTFC
NiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MkUwRTE2
RkNFMTAwQjM0NDYwIC8qIExleGVyLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRENGM0Q1NkIx
Q0QyOTQ3MjAwM0Q1QzY1IC8qIExhenlDbGFzc1N0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZFMTg3QTAyMUJGQkU1NjEwMDM4QkJDQSAvKiBKSVRNdWxHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0J1aWx0
aW5OYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9C
dWlsdGluTmFtZXMuaAkocmV2aXNpb24gMjA0NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05MSw4ICs5MSw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKGNhcGFiaWxpdGllcykgXAogICAgIG1hY3JvKHN0
YXJEZWZhdWx0KSBcCiAgICAgbWFjcm8oSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uKSBcCi0gICAg
bWFjcm8oZ2V0KSBcCi0gICAgbWFjcm8oc2V0KSBcCiAgICAgbWFjcm8oc2hpZnQpIFwKICAgICBt
YWNybyhhbGxvY2F0ZVR5cGVkQXJyYXkpIFwKICAgICBtYWNybyhJbnQ4QXJyYXkpIFwKQEAgLTEz
NCw3ICsxMzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhwcmVkaWN0RmluYWxMZW5n
dGhGcm9tQXJndW11bnRzKSBcCiAgICAgbWFjcm8ocHJpbnQpIFwKICAgICBtYWNybyhpc1NldCkg
XAotICAgIG1hY3JvKGlzTWFwKSBcCiAgICAgbWFjcm8ocmVnRXhwQ3JlYXRlKSBcCiAgICAgbWFj
cm8oU2V0SXRlcmF0b3IpIFwKICAgICBtYWNybyhzZXRJdGVyYXRvck5leHQpIFwKQEAgLTE1OCw3
ICsxNTUsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ocmVnRXhwVGVzdEZhc3QpIFwK
ICAgICBtYWNybyhzdHJpbmdJbmNsdWRlc0ludGVybmFsKSBcCiAgICAgbWFjcm8oc3RyaW5nU3Bs
aXRGYXN0KSBcCi0gICAgbWFjcm8oc3RyaW5nU3Vic3RySW50ZXJuYWwpCisgICAgbWFjcm8oc3Ry
aW5nU3Vic3RySW50ZXJuYWwpIFwKKyAgICBtYWNybyhtYXBIZWFkKSBcCisgICAgbWFjcm8obWFw
VGFpbCkgXAorICAgIG1hY3JvKG1hcFRhYmxlKSBcCisgICAgbWFjcm8obWFwSGFzaCkgXAorICAg
IG1hY3JvKG1hcFNpemUpIFwKKyAgICBtYWNybyhtYXBEZWxldGVDb3VudCkgXAorICAgIG1hY3Jv
KG1hcEJ1Y2tldCkgXAorICAgIG1hY3JvKG1hcEl0ZXJhdGlvbktpbmQpIFwKIAogCiAjZGVmaW5l
IElOSVRJQUxJWkVfUFJJVkFURV9UT19QVUJMSUNfRU5UUlkobmFtZSkgbV9wcml2YXRlVG9QdWJs
aWNNYXAuYWRkKG1fIyNuYW1lIyNQcml2YXRlTmFtZS5pbXBsKCksICZtXyMjbmFtZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwSXRlcmF0b3JQcm90b3R5cGUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcEl0ZXJhdG9y
UHJvdG90eXBlLmpzCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWls
dGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworZnVuY3Rp
b24gbmV4dCgpCit7CisgICAgbGV0IGxhc3RNYXBCdWNrZXQgPSB0aGlzLkBtYXBCdWNrZXQ7Cisg
ICAgaWYgKCFsYXN0TWFwQnVja2V0KQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiQ2Fu
bm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0ZXJhdG9yIG9iamVjdCIp
OworCisgICAgbGV0IGxpc3ROZXh0ID0gbGFzdE1hcEJ1Y2tldC5saXN0TmV4dDsKKyAgICB3aGls
ZSAobGlzdE5leHQgJiYgbGlzdE5leHQuZGVsZXRlZCkKKyAgICAgICAgbGlzdE5leHQgPSBsaXN0
TmV4dC5saXN0TmV4dDsKKworICAgIGlmIChsaXN0TmV4dCkgeworICAgICAgICB0aGlzLkBtYXBC
dWNrZXQgPSBsaXN0TmV4dDsKKyAgICAgICAgaWYgKHRoaXMuQG1hcEl0ZXJhdGlvbktpbmQgPT09
IEBpdGVyYXRpb25LaW5kS2V5VmFsdWUpCisgICAgICAgICAgICByZXR1cm4ge2RvbmU6IGZhbHNl
LCB2YWx1ZTogW2xpc3ROZXh0LmtleSwgbGlzdE5leHQudmFsdWVdfTsKKyAgICAgICAgaWYgKHRo
aXMuQG1hcEl0ZXJhdGlvbktpbmQgPT09IEBpdGVyYXRpb25LaW5kS2V5KQorICAgICAgICAgICAg
cmV0dXJuIHtkb25lOiBmYWxzZSwgdmFsdWU6IGxpc3ROZXh0LmtleX07CisgICAgICAgIC8vIFZh
bHVlCisgICAgICAgIHJldHVybiB7ZG9uZTogZmFsc2UsIHZhbHVlOiBsaXN0TmV4dC52YWx1ZX07
CisgICAgfQorICAgIHJldHVybiB7ZG9uZTogdHJ1ZX07Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMJKHJldmlzaW9uIDIwNDY1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDE2IFl1c3Vr
ZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNyw3ICsyOCw3IEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyosIHRo
aXNBcmcgKi8KIHsKICAgICAidXNlIHN0cmljdCI7CiAKLSAgICBpZiAoIUBpc01hcCh0aGlzKSkK
KyAgICBpZiAoIUBpc0pTTWFwKHRoaXMpKQogICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigi
TWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKIAogICAgIGlmICh0eXBl
b2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpCkBAIC00NCwzICs0NSwxOTYgQEAgZnVuY3Rpb24g
Zm9yRWFjaChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLwogICAgICAgICBjYWxsYmFjay5AY2FsbCh0
aGlzQXJnLCB2YWx1ZVsxXSwgdmFsdWVbMF0sIHRoaXMpOwogICAgIH0KIH0KKworZnVuY3Rpb24g
Z2V0KGtleSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc0pTTWFwKHRoaXMp
KQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24g
bm9uLU1hcCBvYmplY3QiKTsKKworICAgIGxldCB0YWJsZSA9IHRoaXMuQG1hcFRhYmxlOworICAg
IGxldCB0YWJsZUxlbiA9IHRhYmxlLmxlbmd0aDsgCisgICAgbGV0IG1hc2sgPSB0YWJsZUxlbiAt
IDE7CisgICAgbGV0IGhhc2ggPSBAanNNYXBIYXNoKGtleSkgJiBtYXNrOworICAgIGxldCBidWNr
ZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAvL2xldCBhZGRlciA9IDE7CisgICAgd2hpbGUgKGJ1Y2tl
dCkgeworICAgICAgICBpZiAoYnVja2V0LmtleSA9PT0ga2V5ICYmICFidWNrZXQuZGVsZXRlZCkK
KyAgICAgICAgICAgIHJldHVybiBidWNrZXQudmFsdWU7CisgICAgICAgIGhhc2ggPSAoaGFzaCAr
IDEpICYgbWFzazsKKyAgICAgICAgLy9oYXNoID0gKGhhc2ggKyBhZGRlcioqMikgJiBtYXNrOwor
ICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisrOworICAgIH0K
KyAgICByZXR1cm4gQHVuZGVmaW5lZDsKK30KKworZnVuY3Rpb24gaGFzKGtleSkKK3sKKyAgICAi
dXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc0pTTWFwKHRoaXMpKQorICAgICAgICB0aHJvdyBu
ZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsK
KworICAgIGxldCB0YWJsZSA9IHRoaXMuQG1hcFRhYmxlOworICAgIGxldCB0YWJsZUxlbiA9IHRh
YmxlLmxlbmd0aDsgCisgICAgbGV0IG1hc2sgPSB0YWJsZUxlbiAtIDE7CisgICAgbGV0IGhhc2gg
PSBAanNNYXBIYXNoKGtleSkgJiBtYXNrOworICAgIGxldCBidWNrZXQgPSB0YWJsZVtoYXNoXTsK
KyAgICAvL2xldCBhZGRlciA9IDE7CisgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICBpZiAo
YnVja2V0LmtleSA9PT0ga2V5ICYmICFidWNrZXQuZGVsZXRlZCkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioyKSAmIG1hc2s7CisgICAg
ICAgIGhhc2ggPSAoaGFzaCArIDEpICYgbWFzazsKKyAgICAgICAgYnVja2V0ID0gdGFibGVbaGFz
aF07CisgICAgICAgIC8vYWRkZXIrKzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitm
dW5jdGlvbiBkZWxldGUoa2V5KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlz
SlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3BlcmF0aW9u
IGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHRhYmxlID0gdGhpcy5AbWFw
VGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3RoOyAKKyAgICBsZXQgbWFzayA9
IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhhc2goa2V5KSAmIG1hc2s7Cisg
ICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0IGFkZGVyID0gMTsKKyAgICB3
aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGlmIChidWNrZXQua2V5ID09PSBrZXkgJiYgIWJ1Y2tl
dC5kZWxldGVkKSB7CisgICAgICAgICAgICBidWNrZXQuZGVsZXRlZCA9IHRydWU7CisgICAgICAg
ICAgICBidWNrZXQubGlzdE5leHQubGlzdFByZXYgPSBidWNrZXQubGlzdFByZXY7CisgICAgICAg
ICAgICBidWNrZXQubGlzdFByZXYubGlzdE5leHQgPSBidWNrZXQubGlzdE5leHQ7CisgICAgICAg
ICAgICArK3RoaXMuQG1hcERlbGV0ZUNvdW50OworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgLy9oYXNoID0gKGhhc2ggKyBhZGRlcioqMikgJiBtYXNrOworICAg
ICAgICBoYXNoID0gKGhhc2ggKyAxKSAmIG1hc2s7CisgICAgICAgIGJ1Y2tldCA9IHRhYmxlW2hh
c2hdOworICAgICAgICAvL2FkZGVyKys7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKworfQor
CitAZ2xvYmFsUHJpdmF0ZQorZnVuY3Rpb24ganNNYXBSZWhhc2gobWFwLCBvbGRMZW4pCit7Cisg
ICAgdGhpcy5AbWFwU2l6ZSA9IHRoaXMuQG1hcFNpemUgLSB0aGlzLkBtYXBEZWxldGVDb3VudDsK
KyAgICB0aGlzLkBtYXBEZWxldGVDb3VudCA9IDA7CisgICAgbGV0IG5ld1NpemUgPSBvbGRMZW4g
KiAyOworICAgIGxldCB0YWJsZSA9IG5ldyBAQXJyYXkobmV3U2l6ZSk7CisgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCB0YWJsZS5sZW5ndGg7IGkrKykKKyAgICAgICAgdGFibGVbaV0gPSBAdW5kZWZp
bmVkOworICAgIG1hcC5AbWFwVGFibGUgPSB0YWJsZTsKKyAgICBsZXQgbWFzayA9IG5ld1NpemUg
LSAxOworICAgIGxldCBub2RlID0gbWFwLkBtYXBIZWFkLmxpc3ROZXh0OworICAgIGxldCBuZXh0
Tm9kZSA9IG5vZGUubGlzdE5leHQ7CisgICAgd2hpbGUgKG5leHROb2RlKSB7CisgICAgICAgIGxl
dCBrZXkgPSBub2RlLmtleTsKKyAgICAgICAgbGV0IGhhc2ggPSBAanNNYXBIYXNoKGtleSkgJiBt
YXNrOworICAgICAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgIC8vbGV0IGFk
ZGVyID0gMTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICAgICAgLy9oYXNoID0g
KGhhc2ggKyBhZGRlcioqMikgJiBtYXNrOworICAgICAgICAgICAgaGFzaCA9IChoYXNoICsgMSkg
JiBtYXNrOworICAgICAgICAgICAgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgICAgICAv
L2FkZGVyKys7CisgICAgICAgIH0KKworICAgICAgICB0YWJsZVtoYXNoXSA9IG5vZGU7CisgICAg
ICAgIG5vZGUgPSBuZXh0Tm9kZTsKKyAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5saXN0TmV4
dDsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHNldChrZXksIHZhbHVlKQoreworICAgICJ1c2Ugc3Ry
aWN0IjsKKworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlw
ZUVycm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAg
bGV0IHRhYmxlID0gdGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVu
Z3RoOyAKKyAgICBsZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01h
cEhhc2goa2V5KSAmIG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8v
bGV0IGFkZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGlmIChidWNrZXQu
a2V5ID09PSBrZXkpIHsKKyAgICAgICAgICAgIGJ1Y2tldC52YWx1ZSA9IHZhbHVlOworICAgICAg
ICAgICAgYnVja2V0LmRlbGV0ZWQgPSBmYWxzZTsgLy8gTWF5YmUgd2Ugd2VyZSBkZWxldGVkIGJl
Zm9yZSwgYnV0IHdlIGFyZSBub3QgYW55bW9yZS4KKyAgICAgICAgICAgICsrdGhpcy5AbWFwU2l6
ZTsKKyAgICAgICAgICAgIC0tdGhpcy5AbWFwRGVsZXRlQ291bnQ7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgLy9oYXNoID0gKGhhc2ggKyBhZGRlcioqMikgJiBtYXNr
OworICAgICAgICBoYXNoID0gKGhhc2ggKyAxKSAmIG1hc2s7CisgICAgICAgIGJ1Y2tldCA9IHRh
YmxlW2hhc2hdOworICAgICAgICAvL2FkZGVyKys7CisgICAgfQorCisgICAgbGV0IG1hcFRhaWwg
PSB0aGlzLkBtYXBUYWlsOworICAgIGxldCBuZXdJdGVtID0geworICAgICAgICBsaXN0TmV4dDog
bWFwVGFpbCwKKyAgICAgICAgbGlzdFByZXY6IG1hcFRhaWwubGlzdFByZXYsCisgICAgICAgIGtl
eToga2V5LAorICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgIGRlbGV0ZWQ6IGZhbHNlCisg
ICAgfTsKKyAgICBtYXBUYWlsLmxpc3RQcmV2ID0gbmV3SXRlbTsKKyAgICBuZXdJdGVtLmxpc3RQ
cmV2Lmxpc3ROZXh0ID0gbmV3SXRlbTsKKworICAgIHRhYmxlW2hhc2hdID0gbmV3SXRlbTsKKwor
ICAgIGxldCBuZXdTaXplID0gKyt0aGlzLkBtYXBTaXplOworICAgIGlmICgyICogbmV3U2l6ZSA+
IHRhYmxlTGVuKSB7IC8vIERvIGludCBtdWxzIGFuZCBjb21wYXJlLiBUaGlzIGlzIGp1c3QgY2hl
Y2tpbmcgaWYgd2UncmUgZmlsbGVkIHVwIG1vcmUgdGhhbiAxLzIuCisgICAgICAgIEBqc01hcFJl
aGFzaCh0aGlzLCB0YWJsZUxlbik7CisgICAgfSAKK30KKworZnVuY3Rpb24gY2xlYXIoa2V5LCB2
YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc0pTTWFwKHRoaXMpKQor
ICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9u
LU1hcCBvYmplY3QiKTsKKworICAgIHRoaXMuQG1hcFRhYmxlID0gQG5ld0FycmF5V2l0aFNpemUo
NCk7CisgICAgdGhpcy5AbWFwVGFpbC5saXN0UHJldiA9IHRoaXMuQG1hcEhlYWQ7CisgICAgdGhp
cy5AbWFwSGVhZC5saXN0TmV4dCA9IHRoaXMuQG1hcFRhaWw7CisgICAgdGhpcy5AbWFwU2l6ZSA9
IDA7CisgICAgdGhpcy5AbWFwRGVsZXRlQ291bnQgPSAwOworfQorCitmdW5jdGlvbiBsaXN0QXNB
cnJheSgpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkK
KyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5v
bi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQgcmVzdWx0ID0gW107CisKKyAgICBsZXQgYnVja2V0
ID0gdGhpcy5AbWFwSGVhZDsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIHJlc3VsdC5w
dXNoKHsKKyAgICAgICAgICAgIGtleTogYnVja2V0LmtleSB8fCAiRU1QVFkiLAorICAgICAgICAg
ICAgdmFsdWU6IGJ1Y2tldC52YWx1ZSB8fCAiRU1QVFkiCisgICAgICAgIH0pOworICAgICAgICBi
dWNrZXQgPSBidWNrZXQubGlzdE5leHQ7CisgICAgfQorICAgIHJldHVybiB7CisgICAgICAgIHRh
YmxlTGVuZ3RoOiB0aGlzLkBtYXBUYWJsZS5sZW5ndGgsCisgICAgICAgIG1hcFNpemU6IHRoaXMu
QG1hcFNpemUsCisgICAgICAgIGFycmF5OiByZXN1bHQKKyAgICB9OworfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5z
aWNSZWdpc3RyeS5oCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSw4IEBAIGNsYXNzIElkZW50aWZpZXI7CiAgICAgbWFjcm8odG9OdW1iZXIpIFwKICAg
ICBtYWNybyh0b1N0cmluZykgXAogICAgIG1hY3JvKG5ld0FycmF5V2l0aFNpemUpIFwKKyAgICBt
YWNybyhqc01hcEhhc2gpIFwKKyAgICBtYWNybyhpc0pTTWFwKSBcCiAKICNkZWZpbmUgSlNDX0NP
TU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX0VBQ0hfTkFNRShtYWNybykgXAogICAg
IG1hY3JvKHVuZGVmaW5lZCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMjA0NjUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw2ICs1Nyw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19udW1iZXIiLCAi
bGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX3N0cmluZyIsICJs
ZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfanNhcnJheSIsICJs
ZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfanNtYXAiLCAibGVu
Z3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX29iamVjdCIsICJsZW5n
dGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfb2JqZWN0X29yX251bGwi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2Z1bmN0aW9u
IiwgImxlbmd0aCIgOiAzIH0sCkBAIC0xNDcsNyArMTQ4LDggQEAKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX3Jlc3VtZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3Bfd2F0Y2hkb2ciLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSIsICJsZW5ndGgiIDogMn0sCi0gICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCIsICJsZW5ndGgiIDog
M30KKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsIiwg
Imxlbmd0aCIgOiAzfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2pzbWFwX2hhc2giLCAi
bGVuZ3RoIiA6IDMgfQogICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMjA0
NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0
ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19zdHJp
bmc6CiAgICAgY2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CiAgICAg
Y2FzZSBvcF9pc19vYmplY3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoKICAgICBj
YXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAtMTkwLDYgKzE5MSw3IEBAIHZvaWQgY29tcHV0ZVVzZXNG
b3JCeXRlY29kZU9mZnNldCgKICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CiAgICAgY2Fz
ZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0Ogor
ICAgIGNhc2Ugb3BfanNtYXBfaGFzaDoKICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czog
ewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKTsKQEAgLTQxOSw2ICs0MjEsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNv
ZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19z
dHJpbmc6CiAgICAgY2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CiAg
ICAgY2FzZSBvcF9pc19vYmplY3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoKICAg
ICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAtNDY0LDYgKzQ2Nyw3IEBAIHZvaWQgY29tcHV0ZURl
ZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3Vuc2lnbmVkOgogICAgIGNh
c2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiAKICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAg
IGNhc2Ugb3BfanNtYXBfaGFzaDoKICAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDogewogICAg
ICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAxKTsKICAgICAgICAgZnVuY3Rv
cihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOSw2ICsxMTE5LDE0IEBAIHZvaWQg
Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBl
eGVjLCBsb2NhdGlvbiwgaXQsICJpc19qc2FycmF5Iik7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX2pzbWFwOiB7CisgICAgICAgICAgICBwcmludFVu
YXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19qc21hcCIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qc21hcF9oYXNoOiB7CisgICAgICAg
ICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqc21hcF9oYXNoIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2lzX29iamVj
dDogewogICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAi
aXNfb2JqZWN0Iik7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjI5LDYgKzYyOSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIGluZGV4KTsKIAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNK
U0FycmF5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5h
cnlPcChvcF9pc19qc2FycmF5LCBkc3QsIHNyYyk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dElzSlNNYXAoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRV
bmFyeU9wKG9wX2lzX2pzbWFwLCBkc3QsIHNyYyk7IH0KKyAgICAgICAgUmVnaXN0ZXJJRCogZW1p
dEpTTWFwSGFzaChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1p
dFVuYXJ5T3Aob3BfanNtYXBfaGFzaCwgZHN0LCBzcmMpOyB9CiAgICAgICAgIFJlZ2lzdGVySUQq
IGVtaXRJc09iamVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTY0LDYgKzk2NCwyNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05v
ZGU6OmVtaXRfCiAgICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb24uZ2V0KCk7CiB9CiAKK1JlZ2lz
dGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfanNNYXBIYXNoKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgSlNDOjpSZWdpc3RlcklEKiBkc3QpCit7
CisgICAgQXJndW1lbnRMaXN0Tm9kZSogbm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZTsKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gc2l6ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKKyAgICBB
U1NFUlQoIW5vZGUtPm1fbmV4dCk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0
aW5hdGlvbiA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgZ2VuZXJhdG9y
LmVtaXRKU01hcEhhc2goZmluYWxEZXN0aW5hdGlvbi5nZXQoKSwgc2l6ZS5nZXQoKSk7CisgICAg
cmV0dXJuIGZpbmFsRGVzdGluYXRpb24uZ2V0KCk7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2Rl
SW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfaXNKU01hcChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yJiBnZW5lcmF0b3IsIEpTQzo6UmVnaXN0ZXJJRCogZHN0KQoreworICAgIEFyZ3VtZW50TGlz
dE5vZGUqIG5vZGUgPSBtX2FyZ3MtPm1fbGlzdE5vZGU7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHNpemUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7CisgICAgQVNTRVJUKCFub2RlLT5tX25l
eHQpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdGluYXRpb24gPSBnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgIGdlbmVyYXRvci5lbWl0SXNKU01hcChmaW5h
bERlc3RpbmF0aW9uLmdldCgpLCBzaXplLmdldCgpKTsKKyAgICByZXR1cm4gZmluYWxEZXN0aW5h
dGlvbi5nZXQoKTsKK30KIAogI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRSSU5TSUNf
Q09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBcCiAgICAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY18jI25hbWUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMjAsNiArMTAyMCwxMSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAorICAgIGNhc2UgSlNNYXBIYXNoOiB7CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBJc0Vt
cHR5OgogICAgIGNhc2UgSXNKU0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0xMDMw
LDYgKzEwMzUsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgY2FzZSBJc09iamVjdE9yTnVsbDoKICAgICBjYXNlIElzRnVuY3Rpb246CiAgICAgY2FzZSBJ
c1JlZ0V4cE9iamVjdDoKKyAgICBjYXNlIElzSlNNYXA6CiAgICAgY2FzZSBJc1R5cGVkQXJyYXlW
aWV3OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKICAgICAgICAgaWYgKGNoaWxkLnZhbHVlKCkpIHsKQEAgLTEwMzgsNiArMTA0NCw5IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGNh
c2UgSXNKU0FycmF5OgogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVh
bihjaGlsZC52YWx1ZSgpLmlzT2JqZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+
dHlwZSgpID09IEFycmF5VHlwZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBJc0pTTWFwOgorICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9v
bGVhbihjaGlsZC52YWx1ZSgpLmlzT2JqZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3Qo
KS0+dHlwZSgpID09IEpTTWFwVHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCBqc0Jvb2xlYW4oCiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnZhbHVlKCkuaXNDZWxsKCkK
QEAgLTEyNzksNiArMTI4OCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2Ug
SXNKU01hcDoKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTQ4LDYgKzM5NDgsMTggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaXNfanNhcnJheSk7CiAgICAgICAgIH0K
IAorICAgICAgICBjYXNlIG9wX2lzX2pzbWFwOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwor
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSwgYWRkVG9HcmFwaChJc0pTTWFwLCB2YWx1ZSkpOworICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfaXNfanNtYXApOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBvcF9qc21hcF9o
YXNoOiB7CisgICAgICAgICAgICBOb2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChKU01h
cEhhc2gsIHZhbHVlKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9qc21hcF9oYXNoKTsK
KyAgICAgICAgfQorCiAgICAgICAgIGNhc2Ugb3BfaXNfb2JqZWN0OiB7CiAgICAgICAgICAgICBO
b2RlKiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kKSwgYWRkVG9HcmFwaChJc09iamVjdCwgdmFsdWUpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIENhcGFiaWxpdHlMZXZlbCBj
YXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2lzX251bWJlcjoKICAgICBjYXNl
IG9wX2lzX3N0cmluZzoKICAgICBjYXNlIG9wX2lzX2pzYXJyYXk6CisgICAgY2FzZSBvcF9pc19q
c21hcDoKICAgICBjYXNlIG9wX2lzX29iamVjdDoKICAgICBjYXNlIG9wX2lzX29iamVjdF9vcl9u
dWxsOgogICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246CkBAIC0yNDEsNiArMjQyLDcgQEAgQ2FwYWJp
bGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfbG9nX3NoYWRv
d19jaGlja2VuX3RhaWw6CiAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6CiAgICAgY2FzZSBvcF9y
ZXNvbHZlX3Njb3BlOgorICAgIGNhc2Ugb3BfanNtYXBfaGFzaDoKICAgICAgICAgcmV0dXJuIENh
bkNvbXBpbGVBbmRJbmxpbmU7CiAKICAgICBjYXNlIG9wX25ld19yZWdleHA6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA0NjUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE2Niw2ICsxNjYsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDb21wYXJlRXFQdHI6
CiAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgY2FzZSBJc0pTTWFwOgogICAgIGNhc2UgSXNFbXB0
eToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29sZWFuOgpAQCAtMTkwLDYg
KzE5MSwxMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
ICAgIGRlZihQdXJlVmFsdWUobm9kZSkpOwogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBGSVhN
RTogY29uc2lkZXIgd2hhdCBoYXBwZW5zIHdoZW4gd2UgcmVzb2x2ZSBhIHJvcGUgaGVyZS4KKyAg
ICBjYXNlIEpTTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAg
IHJldHVybjsKKwogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2FzZSBC
aXRYb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZp
c2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VP
ZkN1c3RvbToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CiAgICAgY2Fz
ZSBJc0VtcHR5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46CkBA
IC0xODUsNiArMTg2LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAg
IGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgIGNhc2UgSlNNYXBIYXNoOgogICAgIGNhc2Ug
VW5yZWFjaGFibGU6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENo
ZWNrVGllclVwSW5Mb29wOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIzLDYgKzE1MjMsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2Fz
ZSBJc0pTTWFwOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1
bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKICNpZiAhQVNTRVJUX0RJU0FC
TEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhh
dCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAg
ICBjYXNlIFNldEFyZ3VtZW50OgpAQCAtMTU5NCw2ICsxNjAwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6
CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxUHRyOgorICAgICAgICBjYXNlIEpTTWFwSGFzaDoKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNDY1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzA5LDYgKzMwOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAg
ICBtYWNybyhJbnN0YW5jZU9mQ3VzdG9tLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8oSXNKU0FycmF5LCBOb2RlUmVzdWx0Qm9vbGVhbikg
XAorICAgIG1hY3JvKElzSlNNYXAsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNF
bXB0eSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc1VuZGVmaW5lZCwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc0Jvb2xlYW4sIE5vZGVSZXN1bHRCb29sZWFuKSBc
CkBAIC0zODgsNyArMzg5LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhUb0lu
ZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpCisgICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJl
c3VsdEpTKSBcCisgICAgLyogSGFzaGluZyBmb3IgSlNNYXAgKi8gXAorICAgIG1hY3JvKEpTTWFw
SGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25v
dG9uaWNhbGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVz
ZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2Vk
IHZpYSB0aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcg
QEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVu
dC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0x
NzE5LDYgKzE3MjAsMTcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNW
YQogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpLCBzbG90KTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkpTTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGlucHV0KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc01hcEhhc2goZXhlYywg
SlNWYWx1ZTo6ZGVjb2RlKGlucHV0KSk7CisgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gcmVzdWx0LmFzSW50MzIoKTsKK30KKwogZXh0ZXJuICJD
IiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayog
Y29kZUJsb2NrLCBPU1JFeGl0QmFzZSogZXhpdCkKIHsKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJl
ZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNv
IHdvdWxkbid0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMjA0NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2ICsxODAsOCBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gZGVidWdPcGVyYXRpb25QcmludFNwCiAKIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2Vy
UmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiwgT1NSRXhpdEJhc2UqKSBXVEZfSU5URVJOQUw7
CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEhhc2goRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUgaW5wdXQpOworCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKIGRvdWJsZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJhbmRvbShKU0dsb2JhbE9iamVjdCopOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA0NjUyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc0NCw2ICs3NDQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6IHsKKyAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorCiAgICAgICAgIGNhc2UgR2V0UmVzdExlbmd0aDogewogICAgICAgICAgICAgc2V0UHJlZGlj
dGlvbihTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzg3LDYgKzc5Miw3
IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgY2FzZSBJbnN0
YW5jZU9mQ3VzdG9tOgogICAgICAgICBjYXNlIElzSlNBcnJheToKKyAgICAgICAgY2FzZSBJc0pT
TWFwOgogICAgICAgICBjYXNlIElzRW1wdHk6CiAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAg
ICAgICAgIGNhc2UgSXNCb29sZWFuOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgsNiAr
MjU4LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNh
c2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206CiAgICAgY2FzZSBJc0pT
QXJyYXk6CisgICAgY2FzZSBJc0pTTWFwOgogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElz
VW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29sZWFuOgpAQCAtMzU1LDYgKzM1Niw3IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldER5bmFtaWNW
YXI6CiAgICAgY2FzZSBQdXREeW5hbWljVmFyOgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgorICAg
IGNhc2UgSlNNYXBIYXNoOgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQm90dG9t
VmFsdWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2NjcsNiAr
NDY2NywxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgSXNKU01hcDogeworICAgICAgICBjb21waWxl
SXNKU01hcChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBKU01hcEhh
c2g6IHsKKyAgICAgICAgY29tcGlsZUpTTWFwSGFzaChub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCiAgICAgY2FzZSBJc09iamVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYx
MCw2ICszNjEwLDg0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTQXJyYXkoTm8K
ICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSXNKU01hcChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChu
b2RlLT50eXBlKCkgPT0gSXNKU01hcCk7CisgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBDZWxsVXNlKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKwor
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJlOChKSVRDb21w
aWxlcjo6RXF1YWwsCisgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyh2YWx1ZUdQUiwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAgICBUcnVzdGVkSW1tMzIo
SlNNYXBUeXBlKSwKKyAgICAgICAgICAgIHJlc3VsdEdQUik7CisgICAgICAgIGJsZXNzQm9vbGVh
bihyZXN1bHRHUFIpOworICAgICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1
bHQodGhpcyk7CisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2YWx1ZS5qc1ZhbHVlUmVn
cygpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwodmFsdWVSZWdzKTsK
KworICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpFcXVhbCwKKyAgICAgICAgSklUQ29t
cGlsZXI6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihKU01hcFR5cGUpLAorICAgICAgICBy
ZXN1bHRHUFIpOworICAgIGJsZXNzQm9vbGVhbihyZXN1bHRHUFIpOworICAgIEpJVENvbXBpbGVy
OjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBpc05vdENlbGwubGluaygmbV9qaXQp
OworICAgIG1vdmVGYWxzZVRvKHJlc3VsdEdQUik7CisKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworfQorCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSlNNYXBIYXNoKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJU
KG5vZGUtPnR5cGUoKSA9PSBKU01hcEhhc2gpOworCisgICAgSlNWYWx1ZU9wZXJhbmQgaW5wdXQo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisK
KyAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHN0cmFpZ2h0
SGFzaDsKKyAgICBhdXRvIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChpbnB1dEdQ
Uik7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIHNsb3dQYXRo
LmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisKKyAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgIHN0cmFpZ2h0SGFzaC5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpKTsKKyAgICBzdHJhaWdodEhh
c2guYXBwZW5kKG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MoaW5wdXRHUFIpKSk7Cisg
ICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICBzdHJhaWdodEhhc2gubGlu
aygmbV9qaXQpOworICAgIG1faml0LmpzTWFwSGFzaChpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgIGF1dG8gZG9uZSA9IG1faml0
Lmp1bXAoKTsKKworICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBI
YXNoLCByZXN1bHRHUFIsIGlucHV0R1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJl
c3VsdEdQUik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cit9CisKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVJc1JlZ0V4cE9iamVjdChOb2RlKiBub2RlKQogewogICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDIwNDY1
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtNzU2LDYgKzc1Niw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJ
bnN0YW5jZU9mQ3VzdG9tKE5vZGUqKTsKIAogICAgIHZvaWQgY29tcGlsZUlzSlNBcnJheShOb2Rl
Kik7CisgICAgdm9pZCBjb21waWxlSXNKU01hcChOb2RlKik7CisgICAgdm9pZCBjb21waWxlSlNN
YXBIYXNoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc1JlZ0V4cE9iamVjdChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlSXNUeXBlZEFycmF5VmlldyhOb2RlKik7CiAKQEAgLTE2NzEsNiArMTY3
MywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAg
ICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlv
bl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIsIHVuc2lnbmVk
IGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpLCBUcnVzdGVkSW1tMzIoYXJnMykpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24g
MjA0NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDggQEAgaW5saW5lIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICBj
YXNlIFVucmVhY2hhYmxlOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01hcDoK
KyAgICBjYXNlIEpTTWFwSGFzaDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVm
aW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODk3LDYgKzg5NywxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElzSlNBcnJheToKICAgICAg
ICAgICAgIGNvbXBpbGVJc0pTQXJyYXkoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIElzSlNNYXA6CisgICAgICAgICAgICBjb21waWxlSXNKU01hcCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICAgICAgY29tcGlsZUpTTWFw
SGFzaCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6CiAgICAg
ICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjI2NCw2
ICs2MjcwLDExNCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQz
Miwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZvaWQgY29tcGls
ZUpTTWFwSGFzaCgpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBzdHJhaWdodEhhc2ggPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBpc051bWJlckNhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAg
IG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25v
ZGUtPmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGwpKTsKKwor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2Us
IG5vdENlbGwpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVhbChtX291dC5s
b2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwgbV9vdXQu
Y29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIGlzU3RyaW5nLCB1bnN1cmUoc2xvd0Nhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwgaXNOdW1iZXJDYXNlKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUpLCB1bnN1cmUoaXNOdW1i
ZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAg
ICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShzdHJhaWdodEhhc2gpLCB1bnN1cmUoc2xv
d0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJhaWdodEhhc2gsIHNsb3dDYXNl
KTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAgTFZhbHVlIGtleSA9
IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0
LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7CisgICAgICAgIHRlbXAgPSBtX291dC5i
aXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAg
ICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRl
bXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjIpKTsKKyAgICAgICAga2V5
ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8PCAx
Myk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwg
bV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRlbXAp
OworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49
IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5s
U2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOworICAgICAgICBrZXkgPSBtX291dC5iaXRY
b3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7CisgICAgICAgIHRl
bXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQz
MigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBr
ZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBt
X291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTUpKTsKKyAgICAgICAga2V5ID0gbV9v
dXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8PCAyNyk7Cisg
ICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQu
Y29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRlbXApOworICAg
ICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkg
Pj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0
ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihr
ZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5jYXN0VG9JbnQzMihrZXkpOworCisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Ioa2V5KTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNs
b3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsKEludDMyLCBtX291dC5vcGVyYXRp
b24ob3BlcmF0aW9uSlNNYXBIYXNoKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKEludDMyLCBmYXN0
UmVzdWx0LCBzbG93UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNKU01hcCgp
CisgICAgeworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVz
ZSkgeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQuZXF1YWwoCisgICAgICAgICAgICAgICAg
bV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSks
CisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihKU01hcFR5cGUpKSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX25vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBp
c0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBub3RD
ZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJvb2xlYW5GYWxzZSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKGNvbnRpbnVhdGlvbikpOwor
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2Fz
ZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5lcXVhbCgKKyAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMy
KHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQzMihKU01hcFR5cGUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIsIG5vdENlbGxSZXN1bHQsIGNlbGxSZXN1
bHQpKTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCiAgICAgewog
ICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmpl
Y3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjA0NjUyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MjYsNiArNjI2LDQ5IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1
YWxDYWwKICAgICAgICAgfSk7CiB9CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqc01hcEhhc2go
R1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBHUFJSZWcgaW5w
dXQgPSBpbnB1dEFuZFJlc3VsdDsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgIG1v
dmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzMiksIHNjcmF0
Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAg
ICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAg
dXJzaGlmdDY0KFRydXN0ZWRJbW0zMigyMiksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gs
IGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgIG1vdmUoaW5wdXQsIHNj
cmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigxMyksIHNjcmF0Y2gpOworICAgIG5v
dDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0g
KGtleSA+PiA4KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDgpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAg
Ly8ga2V5ICs9IChrZXkgPDwgMyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoKTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1
dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gMTUpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gp
OworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoMTUpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChz
Y3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICBtb3ZlKGlu
cHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMjcpLCBzY3JhdGNoKTsK
KyAgICBub3Q2NChzY3JhdGNoKTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8g
a2V5IF49IChrZXkgPj4gMzEpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1
dCk7CisKKyAgICAvLyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIGFuZDY0KFRy
dXN0ZWRJbW0zMihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpLCBpbnB1dEFu
ZFJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAko
cmV2aXNpb24gMjA0NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOCBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6Ok5v
bmUgfHwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobV9iYXNlbGluZUNvZGVCbG9jay0+aml0VHlw
ZSgpKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGpzTWFwSGFzaChHUFJSZWcgaW5w
dXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92
bTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMjA0NjUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NjMsNiArMjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICBERUZJTkVfT1Aob3BfaXNfbnVtYmVyKQogICAgICAgICBERUZJTkVfT1Aob3BfaXNfc3RyaW5n
KQogICAgICAgICBERUZJTkVfT1Aob3BfaXNfanNhcnJheSkKKyAgICAgICAgREVGSU5FX09QKG9w
X2lzX2pzbWFwKQogICAgICAgICBERUZJTkVfT1Aob3BfaXNfb2JqZWN0KQogICAgICAgICBERUZJ
TkVfT1Aob3BfamVxX251bGwpCiAgICAgICAgIERFRklORV9PUChvcF9qZmFsc2UpCkBAIC0zNTMs
NiArMzU0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICAg
ICAgCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUpCiAg
ICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKKyAgICAgICAgREVG
SU5FX09QKG9wX2pzbWFwX2hhc2gpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw2ICs1MjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgdm9pZCBlbWl0X29wX2lzX251bWJlcihJbnN0cnVjdGlvbiopOwogICAgICAgICB2
b2lkIGVtaXRfb3BfaXNfc3RyaW5nKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9pc19qc2FycmF5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9vcF9pc19qc21h
cChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfb2JqZWN0KEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVjdGlvbiopOwogICAg
ICAgICB2b2lkIGVtaXRfb3BfamZhbHNlKEluc3RydWN0aW9uKik7CkBAIC02MDcsNiArNjA4LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19pbmRleF9zdHJpbmco
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9w
cm9sb2d1ZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2pzbWFwX2hh
c2goSW5zdHJ1Y3Rpb24qKTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2FkZChJbnN0cnVj
dGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAgICAgdm9pZCBl
bWl0U2xvd19vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsNTUgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfaXNfanNhcnJheShJbnN0cnVjdGlvbgogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfaXNfanNtYXAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwor
CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAgIEp1bXAgaXNO
b3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBjb21wYXJlOChFcXVh
bCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJ
bW0zMihKU01hcFR5cGUpLCByZWdUMCk7CisgICAgZW1pdFRhZ0Jvb2wocmVnVDApOworICAgIEp1
bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgIG1vdmUo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICBkb25lLmxpbmsodGhpcyk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJVDo6ZW1pdF9v
cF9qc21hcF9oYXNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIEp1bXBMaXN0IHN0cmFpZ2h0
SGFzaDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgSnVt
cCBpc05vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBKdW1wTGlzdCBz
bG93UGF0aDsKKyAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoOChFcXVhbCwgQWRkcmVzcyhyZWdU
MCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBl
KSkpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoanVtcCgpKTsKKworICAgIGlzTm90Q2VsbC5s
aW5rKHRoaXMpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoYnJhbmNoSWZOb3ROdW1iZXIocmVn
VDApKTsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKGJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3Mo
cmVnVDApKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisKKyAgICBzdHJhaWdodEhh
c2gubGluayh0aGlzKTsKKworICAgIGpzTWFwSGFzaChyZWdUMCwgcmVnVDEpOworICAgIGJveElu
dDMyKHJlZ1QwLCBKU1ZhbHVlUmVncyhyZWdUMCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0
ZXIoZHN0KTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKHRo
aXMpOworICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfanNtYXBfaGFzaCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
KyAgICBkb25lLmxpbmsodGhpcyk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50RGF0YS5jcHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDcg
QEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgU1RBVElDX0FTU0VS
VChGaW5hbE9iamVjdFR5cGUgPT0gMjEpOwogICAgIFNUQVRJQ19BU1NFUlQoSlNGdW5jdGlvblR5
cGUgPT0gMjMpOwogICAgIFNUQVRJQ19BU1NFUlQoQXJyYXlUeXBlID09IDI5KTsKKyAgICBTVEFU
SUNfQVNTRVJUKEpTTWFwVHlwZSA9PSAxMTcpOwogICAgIFNUQVRJQ19BU1NFUlQoSW50OEFycmF5
VHlwZSA9PSAxMDApOwogICAgIFNUQVRJQ19BU1NFUlQoSW50MTZBcnJheVR5cGUgPT0gMTAxKTsK
ICAgICBTVEFUSUNfQVNTRVJUKEludDMyQXJyYXlUeXBlID09IDEwMik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIw
NDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0OTAsNyArMTQ5MCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9kZWJ1ZykKICAgICBMTElOVF9CRUdJTigpOwogICAgIGludCBkZWJ1Z0hvb2tJ
RCA9IHBjWzFdLnUub3BlcmFuZDsKICAgICB2bS5pbnRlcnByZXRlci0+ZGVidWcoZXhlYywgc3Rh
dGljX2Nhc3Q8RGVidWdIb29rSUQ+KGRlYnVnSG9va0lEKSk7Ci0gICAgCiAgICAgTExJTlRfRU5E
KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5
KQpAQCAtMTE5OSwyMCArMTE5OSwxMDAgQEAgX2xsaW50X29wX2lzX3N0cmluZzoKICAgICBzdG9y
ZXEgVmFsdWVGYWxzZSwgW2NmciwgdDIsIDhdCiAgICAgZGlzcGF0Y2goMykKIAotCi1fbGxpbnRf
b3BfaXNfanNhcnJheToKLSAgICB0cmFjZUV4ZWN1dGlvbigpCittYWNybyBlbWl0SXNDZXJ0YWlu
SlNUeXBlKHR5cGUpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQogICAgIGxvYWRp
c0Zyb21JbnN0cnVjdGlvbigxLCB0MikKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0
MCkKLSAgICBidHFueiB0MCwgdGFnTWFzaywgLm9wSXNKU0FycmF5Tm90Q2VsbAotICAgIGNiZXEg
SlNDZWxsOjptX3R5cGVbdDBdLCBBcnJheVR5cGUsIHQxCisgICAgYnRxbnogdDAsIHRhZ01hc2ss
IC5qc1R5cGVOb3RDZWxsCisgICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0MF0sIHR5cGUsIHQxCiAg
ICAgb3JxIFZhbHVlRmFsc2UsIHQxCiAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MiwgOF0KICAgICBk
aXNwYXRjaCgzKQotLm9wSXNKU0FycmF5Tm90Q2VsbDoKKy5qc1R5cGVOb3RDZWxsOgogICAgIHN0
b3JlcSBWYWx1ZUZhbHNlLCBbY2ZyLCB0MiwgOF0KICAgICBkaXNwYXRjaCgzKQorZW5kCisKK19s
bGludF9vcF9pc19qc2FycmF5OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBlbWl0SXNDZXJ0
YWluSlNUeXBlKEFycmF5VHlwZSkKKworCitfbGxpbnRfb3BfaXNfanNtYXA6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGVtaXRJc0NlcnRhaW5KU1R5cGUoSlNNYXBUeXBlKQorCitfbGxpbnRf
b3BfanNtYXBfaGFzaDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDIsIHQxKQorICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQwKQorICAgIGJ0
cW56IHQwLCB0YWdNYXNrLCAuanNNYXBIYXNoTm90Q2VsbAorICAgIGJibmVxIEpTQ2VsbDo6bV90
eXBlW3QwXSwgU3RyaW5nVHlwZSwgLnN0cmFpZ2h0SGFzaAorICAgIGNhbGxPcGNvZGVTbG93UGF0
aChfc2xvd19wYXRoX2pzbWFwX2hhc2gpCisgICAgZGlzcGF0Y2goMykKKy5qc01hcEhhc2hOb3RD
ZWxsOgorICAgIGJxYiB0MCwgdGFnVHlwZU51bWJlciwgLm9wMU5vdEludAorICAgIGptcCAuc3Ry
YWlnaHRIYXNoCisub3AxTm90SW50OgorICAgIGJ0cXogdDAsIHRhZ1R5cGVOdW1iZXIsIC5zdHJh
aWdodEhhc2gKKyAgICAjIEZJWE1FIG1ha2UgZG91YmxlIGNhc2UgZmFzdAorICAgIGNhbGxPcGNv
ZGVTbG93UGF0aChfc2xvd19wYXRoX2pzbWFwX2hhc2gpCisgICAgZGlzcGF0Y2goMykKKy5zdHJh
aWdodEhhc2g6CisgICAgbW92ZSB0MCwgdDEKKyMga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICBs
c2hpZnRwIDMyLCB0MQorICAgIG5vdHEgdDEKKyAgICBhZGRxIHQxLCB0MAorIyBrZXkgXj0gKGtl
eSA+PiAyMik7CisgICAgbW92ZSB0MCwgdDEKKyAgICB1cnNoaWZ0cCAyMiwgdDEKKyAgICB4b3Jx
IHQxLCB0MAorIyBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgIG1vdmUgdDAsIHQxCisgICAgbHNo
aWZ0cCAxMywgdDEKKyAgICBub3RxIHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChrZXkg
Pj4gOCk7CisgICAgbW92ZSB0MCwgdDEKKyAgICB1cnNoaWZ0cCA4LCB0MQorICAgIHhvcnEgdDEs
IHQwCisjIGtleSArPSAoa2V5IDw8IDMpOworICAgIG1vdmUgdDAsIHQxCisgICAgbHNoaWZ0cCAz
LCB0MQorICAgIGFkZHEgdDEsIHQwCisjIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICBtb3ZlIHQw
LCB0MQorICAgIHVyc2hpZnRwIDE1LCB0MQorICAgIHhvcnEgdDEsIHQwCisjIGtleSArPSB+KGtl
eSA8PCAyNyk7CisgICAgbW92ZSB0MCwgdDEKKyAgICBsc2hpZnRwIDI3LCB0MQorICAgIG5vdHEg
dDEKKyAgICBhZGRxIHQxLCB0MAorIyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZSB0MCwg
dDEKKyAgICB1cnNoaWZ0cCAzMSwgdDEKKyAgICB4b3JxIHQxLCB0MAorCisgICAgYW5kcSA0Mjk0
OTY3Mjk1LCB0MCAjIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpCisgICAgb3JxIHRhZ1R5
cGVOdW1iZXIsIHQwCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQorICAgIHN0b3Jl
cSB0MCwgW2NmciwgdDIsIDhdCisgICAgZGlzcGF0Y2goMykKKworCisjICAgIGxvYWRpc0Zyb21J
bnN0cnVjdGlvbigyLCB0MSkKKyMgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQorIyAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MCkKKyMgICAgYnRxbnogdDAsIHRhZ01hc2ss
IC5vcElzSlNBcnJheU5vdENlbGwKKyMgICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEFycmF5
VHlwZSwgdDEKKyMgICAgb3JxIFZhbHVlRmFsc2UsIHQxCisjICAgIHN0b3JlcSB0MSwgW2Nmciwg
dDIsIDhdCisjICAgIGRpc3BhdGNoKDMpCisjLm9wSXNKU0FycmF5Tm90Q2VsbDoKKyMgICAgc3Rv
cmVxIFZhbHVlRmFsc2UsIFtjZnIsIHQyLCA4XQorIyAgICBkaXNwYXRjaCgzKQogCiAKIF9sbGlu
dF9vcF9pc19vYmplY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTM0Nyw2ICszNDcsNyBAQCBjb25zdCBPYmplY3RUeXBlID0gMjAKIGNvbnN0IEZpbmFs
T2JqZWN0VHlwZSA9IDIxCiBjb25zdCBKU0Z1bmN0aW9uVHlwZSA9IDIzCiBjb25zdCBBcnJheVR5
cGUgPSAyOQorY29uc3QgSlNNYXBUeXBlID0gMTE3CiAKICMgVGhlIHR5cGVkIGFycmF5IHR5cGVz
IG5lZWQgdG8gYmUgbnVtYmVyZWQgaW4gYSBwYXJ0aWN1bGFyIG9yZGVyIGJlY2F1c2Ugb2YgdGhl
IG1hbnVhbGx5IHdyaXR0ZW4KICMgc3dpdGNoIHN0YXRlbWVudCBpbiBnZXRfYnlfdmFsIGFuZCBw
dXRfYnlfdmFsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1
Y3Rpb25zLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNt
L2luc3RydWN0aW9ucy5yYgkocmV2aXNpb24gMjA0NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0
MSw3IEBAIE1BQ1JPX0lOU1RSVUNUSU9OUyA9CiAgICAgICJuZWdwIiwKICAgICAgIm5lZ3EiLAog
ICAgICAibm90aSIsCisgICAgICJub3RxIiwKICAgICAgIm9yaSIsCiAgICAgICJyc2hpZnRpIiwK
ICAgICAgInVyc2hpZnRpIiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNt
L3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94
ODYucmIJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5l
YXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtOTAxLDYgKzkwMSw4IEBAIGNsYXNzIEluc3Ry
dWN0aW9uCiAgICAgICAgICAgICAkYXNtLnB1dHMgIm5lZyN7eDg2U3VmZml4KDpxdWFkKX0gI3t4
ODZPcGVyYW5kcyg6cXVhZCl9IgogICAgICAgICB3aGVuICJub3RpIgogICAgICAgICAgICAgJGFz
bS5wdXRzICJub3Qje3g4NlN1ZmZpeCg6aW50KX0gI3t4ODZPcGVyYW5kcyg6aW50KX0iCisgICAg
ICAgIHdoZW4gIm5vdHEiCisgICAgICAgICAgICAkYXNtLnB1dHMgIm5vdCN7eDg2U3VmZml4KDpx
dWFkKX0gI3t4ODZPcGVyYW5kcyg6cXVhZCl9IgogICAgICAgICB3aGVuICJvcmkiCiAgICAgICAg
ICAgICBoYW5kbGVYODZPcCgib3Ije3g4NlN1ZmZpeCg6aW50KX0iLCA6aW50KQogICAgICAgICB3
aGVuICJvcnAiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1
ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5oIgpAQCAtOTMzLDQgKzkz
NCwxMSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbF93aXRoCiAgICAgRU5E
KCk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qc21hcF9oYXNoKQoreworICAgIEJF
R0lOKCk7CisgICAgSlNWYWx1ZSB2YWx1ZVRvSGFzaCA9IE9QX0MoMikuanNWYWx1ZSgpOworICAg
IFJFVFVSTihqc01hcEhhc2goZXhlYywgdmFsdWVUb0hhc2gpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuaAkocmV2aXNpb24gMjA0NjUyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw2ICsyNTgsNyBA
QCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pCiBTTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2dldF9ieV92YWxfd2l0aF90aGlzKTsKIFNMT1dfUEFUSF9ISURE
RU5fREVDTChzbG93X3BhdGhfcHV0X2J5X2lkX3dpdGhfdGhpcyk7CiBTTE9XX1BBVEhfSElEREVO
X0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YWxfd2l0aF90aGlzKTsKK1NMT1dfUEFUSF9ISURERU5f
REVDTChzbG93X3BhdGhfanNtYXBfaGFzaCk7CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNSw3ICs3MjUsNiBAQCBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgICAgIEdsb2JhbFByb3BlcnR5
SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc1NldFByaXZhdGVOYW1lKCks
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5jSXNT
ZXQpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5TZXRJdGVyYXRvclBy
aXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHBy
aXZhdGVGdW5jU2V0SXRlcmF0b3IpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSks
CiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5zZXRJdGVyYXRvck5leHRQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0s
IHRoaXMsIDAsIFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4dCksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzTWFwUHJpdmF0ZU5hbWUoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc01hcCksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzQXJyYXlQcml2YXRlTmFtZSgp
LCBhcnJheUNvbnN0cnVjdG9yLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmlzQXJy
YXkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc0FycmF5Q29uc3Ry
dWN0b3JQcml2YXRlTmFtZSgpLCBwcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1Y3RvciwgRG9udEVu
dW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8o
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY29uY2F0TWVtY3B5UHJpdmF0ZU5hbWUo
KSwgcHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHJldmlz
aW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlNNYXAuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUg
IkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAj
aW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5o
IgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlu
bGluZXMuaCIKIApAQCAtMzcsNiArNDIsNDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAordm9pZCBKU01hcDo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIEJhc2U6OmZpbmlzaENy
ZWF0aW9uKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoQkFTRV9WRUNUT1JfTEVOID09IDQsICJh
c3N1bWVkIGhlcmUgdG8gYmUgYSBwb3dlciBvZiAyIik7CisgICAgSlNBcnJheSogYXJyYXkgPSBK
U0FycmF5OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpLCBCQVNFX1ZFQ1RPUl9M
RU4pOworICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcnJh
eS0+bGVuZ3RoKCkgPT0gQkFTRV9WRUNUT1JfTEVOKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBCQVNFX1ZFQ1RPUl9MRU47IGkrKykKKyAgICAgICAgYXJyYXktPnB1dEJ5SW5kZXhJ
bmxpbmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGksIGpzVW5kZWZpbmVkKCksIGZhbHNl
KTsKKworICAgIEpTT2JqZWN0KiBoZWFkID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xvYmFsT2Jq
ZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIEpTT2JqZWN0KiB0YWlsID0gY29uc3RydWN0RW1wdHlP
YmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIGF1dG8gbWFrZVNoYXBlID0g
WyZdIChKU09iamVjdCogb2JqLCBKU1ZhbHVlIGxpc3ROZXh0LCBKU1ZhbHVlIGxpc3RQcmV2KSB7
CisgICAgICAgIC8qCisgICAgICAgIGxpc3ROZXh0OiBtYXBUYWlsLAorICAgICAgICBsaXN0UHJl
djogbWFwVGFpbC5saXN0UHJldiwKKyAgICAgICAga2V5OiBrZXksCisgICAgICAgIHZhbHVlOiB2
YWx1ZSwKKyAgICAgICAgZGVsZXRlZDogZmFsc2UKKyAgICAgICAgKi8KKworICAgICAgICBvYmot
PnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsaXN0TmV4dCIpLCBs
aXN0TmV4dCwgMCk7CisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9t
U3RyaW5nKCZ2bSwgImxpc3RQcmV2IiksIGxpc3RQcmV2LCAwKTsKKyAgICAgICAgb2JqLT5wdXRE
aXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAia2V5IiksIGpzTnVsbCgpLCAw
KTsKKyAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCAidmFsdWUiKSwganNOdWxsKCksIDApOworICAgICAgICBvYmotPnB1dERpcmVjdCh2bSwgSWRl
bnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZWxldGVkIiksIGpzQm9vbGVhbih0cnVlKSwgMCk7
CisgICAgICAgIAorICAgIH07CisKKyAgICBtYWtlU2hhcGUoaGVhZCwgdGFpbCwganNOdWxsKCkp
OworICAgIG1ha2VTaGFwZSh0YWlsLCBqc051bGwoKSwgaGVhZCk7CisKKyAgICBwdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1hcEhlYWRQcml2YXRlTmFtZSgp
LCBoZWFkLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5tYXBUYWlsUHJpdmF0ZU5hbWUoKSwgdGFpbCwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwVGFibGVQ
cml2YXRlTmFtZSgpLCBhcnJheSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwU2l6ZVByaXZhdGVOYW1lKCksIGpzTnVtYmVy
KDApLCBEb250RW51bSk7Cit9CisKIHZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQog
ewogICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHJldmlzaW9uIDIwNDY1MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTky
LDE2ICs5MiwxOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1
Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3Rv
dHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNNYXBUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVs
bCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0sIHN0cnVjdHVyZSk7Ci0g
ICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIGluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSk7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKwogICAgIHN0YXRpYyBKU01hcCogY3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAg
ICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CkBAIC0xMjksNiArMTMxLDI3
IEBAIHByaXZhdGU6CiAgICAgTWFwRGF0YSBtX21hcERhdGE7CiB9OwogCitBTFdBWVNfSU5MSU5F
IEpTVmFsdWUganNNYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUuaXNEb3VibGUoKSkgeworICAgICAgICBkb3VibGUgZCA9IHZhbHVlLmFzRG91
YmxlKCk7CisgICAgICAgIGlmICghc3RkOjppc25hbihkKSkgeworICAgICAgICAgICAgaW50IGkg
PSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgICAgICAgICAgaWYgKGkgPT0gZCkKKyAgICAgICAg
ICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICh2
YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyh2
YWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgd3RmU3RyaW5nID0gc3RyaW5nLT52YWx1ZShl
eGVjKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUod3RmU3RyaW5nLmltcGwoKS0+
aGFzaCgpKTsKKyAgICB9CisgICAgdWludDY0X3QgcmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUo
dmFsdWUpOworICAgIHJldHVybiBKU1ZhbHVlKFdURjo6aW50SGFzaChyYXdWYWx1ZSkpOworfQor
CiB9CiAKICNlbmRpZiAvLyAhZGVmaW5lZChKU01hcF9oKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNDY1MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiSlNNYXBJdGVyYXRvci5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVk
ZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTTWFwLmgiCkBAIC00MSw2ICs0NCw5IEBAIHZvaWQgSlNNYXBJdGVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7CisgICAgSlNPYmplY3Qq
IGxpc3RIZWFkID0ganNDYXN0PEpTT2JqZWN0Kj4oaXRlcmF0ZWRPYmplY3QtPmdldERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwSGVhZFByaXZhdGVOYW1lKCkp
KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1h
cEJ1Y2tldFByaXZhdGVOYW1lKCksIGxpc3RIZWFkLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tYXBJdGVyYXRpb25LaW5kUHJp
dmF0ZU5hbWUoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fa2luZCkpLCBEb250
RW51bSk7CiB9CiAKIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNl
bGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNUeXBlLmgJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4Miw5IEBAIGVudW0gSlNU
eXBlIDogdWludDhfdCB7CiAgICAgTW9kdWxlRW52aXJvbm1lbnRUeXBlLAogICAgIFJlZ0V4cE9i
amVjdFR5cGUsCiAgICAgUHJveHlPYmplY3RUeXBlLAorICAgIEpTTWFwVHlwZSwKIAotICAgIExh
c3RKU0NPYmplY3RUeXBlID0gUHJveHlPYmplY3RUeXBlLAorICAgIExhc3RKU0NPYmplY3RUeXBl
ID0gSlNNYXBUeXBlLAogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEpTVHlwZSkgPT0gc2l6
ZW9mKHVpbnQ4X3QpLCBzaXplb2ZfanN0eXBlX2lzX29uZV9ieXRlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5j
cHAJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
cEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMzQgKzMyLDQ0IEBA
CiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMu
aCIKIAorI2luY2x1ZGUgIk1hcEl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIgorCisvKiBTb3VyY2Ug
Zm9yIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oCitAYmVnaW4gbWFwSXRlcmF0b3JQcm90b3R5
cGVUYWJsZQorICBuZXh0ICAgICAgSlNCdWlsdGluICBEb250RW51bXxGdW5jdGlvbiAwCitAZW5k
CisqLworCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIE1hcEl0ZXJhdG9yUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJNYXAgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKE1hcEl0ZXJhdG9yUHJvdG90eXBlKSB9OworY29uc3QgQ2xhc3NJbmZv
IE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJNYXAgSXRlcmF0b3IiLCAmQmFzZTo6
c19pbmZvLCAmbWFwSXRlcmF0b3JQcm90b3R5cGVUYWJsZSwgQ1JFQVRFX01FVEhPRF9UQUJMRShN
YXBJdGVyYXRvclByb3RvdHlwZSkgfTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChFeGVjU3RhdGUqKTsKKy8vc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4
dChFeGVjU3RhdGUqKTsKIAogdm9pZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIFVOVVNFRF9Q
QVJBTShnbG9iYWxPYmplY3QpOworCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90
eXBlKHRoaXMpOwogCi0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9u
dEVudW0sIDApOworICAgIC8vSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9u
dEVudW0sIDApOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0
eU5hbWVzLT50b1N0cmluZ1RhZ1N5bWJvbCwganNTdHJpbmcoJnZtLCAiTWFwIEl0ZXJhdG9yIiks
IERvbnRFbnVtIHwgUmVhZE9ubHkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0g
ICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3Iq
PihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWl0ZXJhdG9yKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRl
cmFsKCJDYW5ub3QgY2FsbCBNYXBJdGVyYXRvci5uZXh0KCkgb24gYSBub24tTWFwSXRlcmF0b3Ig
b2JqZWN0IikpKTsKLQotICAgIEpTVmFsdWUgcmVzdWx0OwotICAgIGlmIChpdGVyYXRvci0+bmV4
dChjYWxsRnJhbWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3Jl
YXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Ci0gICAg
aXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRl
cmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7Ci19Cisv
L0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4
dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKy8veworLy8gICAgSlNNYXBJdGVyYXRvciogaXRlcmF0
b3IgPSBqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgp
KTsKKy8vICAgIGlmICghaXRlcmF0b3IpCisvLyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgTWFw
SXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0ZXJhdG9yIG9iamVjdCIpKSk7CisvLworLy8g
ICAgSlNWYWx1ZSByZXN1bHQ7CisvLyAgICBpZiAoaXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCBy
ZXN1bHQpKQorLy8gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JS
ZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7CisvLyAgICBpdGVyYXRvci0+
ZmluaXNoKCk7CisvLyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVz
dWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOworLy99CiAKIAogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRv
clByb3RvdHlwZS5oCShyZXZpc2lvbiAyMDQ2NTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCw4IEBAIGNsYXNzIE1hcEl0ZXJhdG9yUHJvdG90eXBlIDogcHVibGljIEpTTm8KIHB1YmxpYzoK
ICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBCYXNlOjpT
dHJ1Y3R1cmVGbGFnczsKKwogICAgIHN0YXRpYyBNYXBJdGVyYXRvclByb3RvdHlwZSogY3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewogICAgICAgICBNYXBJdGVyYXRvclByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TWFwSXRlcmF0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBN
YXBJdGVyYXRvclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA0NjUyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsMTQgKzQ4LDIwIEBAIGNvbnN0IENsYXNzSW5mbyBNYXBQcm90b3R5cGU6
OnNfaW5mbyA9IHsKIC8qIFNvdXJjZSBmb3IgTWFwUHJvdG90eXBlLmx1dC5oCiBAYmVnaW4gbWFw
UHJvdG90eXBlVGFibGUKICAgZm9yRWFjaCAgIEpTQnVpbHRpbiAgRG9udEVudW18RnVuY3Rpb24g
MAorICBnZXQgICAgICAgSlNCdWlsdGluICBEb250RW51bXxGdW5jdGlvbiAxCisgIHNldCAgICAg
ICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDIKKyAgZGVsZXRlICAgIEpTQnVpbHRpbiAg
RG9udEVudW18RnVuY3Rpb24gMQorICBoYXMgICAgICAgSlNCdWlsdGluICBEb250RW51bXxGdW5j
dGlvbiAxCisgIGNsZWFyICAgICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgbGlz
dEFzQXJyYXkgICAgICAgSlNCdWlsdGluICBEb250RW51bXxGdW5jdGlvbiAwCiBAZW5kCiAqLwog
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihF
eGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0RlbGV0ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY0dldChFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0hhcyhFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChFeGVjU3RhdGUqKTsKKy8vc3Rh
dGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoRXhlY1N0
YXRlKik7CisvL3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y0RlbGV0ZShFeGVjU3RhdGUqKTsKKy8vc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgbWFwUHJvdG9GdW5jR2V0KEV4ZWNTdGF0ZSopOworLy9zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoRXhlY1N0YXRlKik7CisvL3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NldChFeGVjU3RhdGUqKTsKIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0tleXMoRXhlY1N0
YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNW
YWx1ZXMoRXhlY1N0YXRlKik7CiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNFbnRyaWVzKEV4ZWNTdGF0ZSopOwpAQCAtNjgsMTcgKzc0LDE4IEBAIHZvaWQg
TWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBBU1NFUlQoaW5oZXJpdHMo
aW5mbygpKSk7CiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIAotICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMt
PmNsZWFyLCBtYXBQcm90b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwotICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdv
cmQsIG1hcFByb3RvRnVuY0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVO
Q1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9G
dW5jR2V0LCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVt
LCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5zZXQsIG1hcFByb3RvRnVuY1NldCwgRG9udEVudW0sIDIpOworICAgIC8vSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xl
YXIsIG1hcFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CisgICAgLy9KU0NfTkFUSVZFX0ZV
TkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3Jk
LCBtYXBQcm90b0Z1bmNEZWxldGUsIERvbnRFbnVtLCAxKTsKKyAgICAvL0pTQ19OQVRJVkVfRlVO
Q1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9G
dW5jR2V0LCBEb250RW51bSwgMSk7CisgICAgLy9KU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVu
dW0sIDEpOworICAgIC8vSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKICAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNLZXlzLCBEb250RW51
bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1
bmNWYWx1ZXMsIERvbnRFbnVtLCAwKTsKIAotICAgIC8vIFByaXZhdGUgZ2V0IC8gc2V0IG9wZXJh
dGlvbnMuCi0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5j
R2V0LCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5T
SVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwg
bWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CisgICAgSlNGdW5jdGlvbiogZ2V0RnVuY3Rp
b24gPSBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIG1hcFByb3RvdHlwZUdl
dENvZGVHZW5lcmF0b3Iodm0pLCBnbG9iYWxPYmplY3QsICJnZXQiKTsKKyAgICBKU0Z1bmN0aW9u
KiBzZXRGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgbWFw
UHJvdG90eXBlU2V0Q29kZUdlbmVyYXRvcih2bSksIGdsb2JhbE9iamVjdCwgInNldCIpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5nZXRQcml2YXRlTmFtZSgpLCBnZXRGdW5jdGlvbiwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5zZXRQcml2YXRlTmFtZSgpLCBzZXRGdW5jdGlvbiwgRG9udEVudW0pOwogCiAgICAgSlNG
dW5jdGlvbiogZW50cmllcyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAw
LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLnN0
cmluZygpLCBtYXBQcm90b0Z1bmNFbnRyaWVzKTsKICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1YmxpY05h
bWUoKSwgZW50cmllcywgRG9udEVudW0pOwpAQCAtMTAyLDU1ICsxMDksNjAgQEAgQUxXQVlTX0lO
TElORSBzdGF0aWMgSlNNYXAqIGdldE1hcChDYWxsRgogICAgIHJldHVybiBtYXA7CiB9CiAKLUVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCi17Ci0gICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIG1hcC0+Y2xlYXIoY2FsbEZyYW1lKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotfQotCi1FbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0RlbGV0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
LXsKLSAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7Ci0gICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4obWFwLT5y
ZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApKSkpOwotfQotCi1FbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0dldChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlz
VmFsdWUoKSk7Ci0gICAgaWYgKCFtYXApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShtYXAtPmdldChjYWxs
RnJhbWUsIGNhbGxGcmFtZS0+YXJndW1lbnQoMCkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAg
SlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwot
ICAgIGlmICghbWFwKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKG1hcC0+aGFzKGNhbGxG
cmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSkpKTsKLX0KLQotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNTZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAg
SlNWYWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOwotICAgIEpTTWFwKiBt
YXAgPSBnZXRNYXAoY2FsbEZyYW1lLCB0aGlzVmFsdWUpOwotICAgIGlmICghbWFwKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIG1hcC0+c2V0KGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVudCgwKSwgY2FsbEZyYW1lLT5hcmd1bWVudCgxKSk7
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzVmFsdWUpOwotfQorLy9FbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1l
KQorLy97CisvLyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50
aGlzVmFsdWUoKSk7CisvLyAgICBpZiAoIW1hcCkKKy8vICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworLy8gICAgbWFwLT5jbGVhcihjYWxsRnJhbWUpOworLy8g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKy8vfQorCisvL0VuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jRGVsZXRlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQorLy97CisvLyAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisvLyAgICBpZiAoIW1hcCkKKy8vICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworLy8gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4obWFwLT5yZW1vdmUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDAp
KSkpOworLy99CisKKy8vRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bmNH
ZXQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisvL3sKKy8vICAgIEpTTWFwKiBtYXAgPSBnZXRNYXAo
Y2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKy8vICAgIGlmICghbWFwKQorLy8g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisvLyAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcC0+Z2V0KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5hcmd1bWVu
dCgwKSkpOworLy99CisKKy8vRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNIYXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCisvL3sKKy8vICAgIEpTTWFwKiBtYXAgPSBnZXRN
YXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKy8vICAgIGlmICghbWFwKQor
Ly8gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisvLyAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihtYXAtPmhhcyhjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+YXJndW1lbnQoMCkpKSk7CisvL30KKworLy9FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY1NldChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKKy8veworLy8gICAgSlNW
YWx1ZSB0aGlzVmFsdWUgPSBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpOworLy8gICAgSlNNYXAqIG1h
cCA9IGdldE1hcChjYWxsRnJhbWUsIHRoaXNWYWx1ZSk7CisvLyAgICBpZiAoIW1hcCkKKy8vICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworLy8gICAgbWFwLT5z
ZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLCBjYWxsRnJhbWUtPmFyZ3VtZW50
KDEpKTsKKy8vICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhpc1ZhbHVlKTsKKy8vfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1NpemUoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiB7CiAgICAgSlNNYXAqIG1hcCA9IGdldE1hcChjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+dGhpc1ZhbHVlKCkpOwogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIobWFwLT5zaXplKGNhbGxGcmFtZSkpKTsKKyAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7
CisgICAgSlNWYWx1ZSBtYXBTaXplID0gbWFwLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFt
ZXMtPmJ1aWx0aW5OYW1lcygpLm1hcFNpemVQcml2YXRlTmFtZSgpKTsKKyAgICBKU1ZhbHVlIGRl
bGV0ZUNvdW50ID0gbWFwLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLm1hcERlbGV0ZUNvdW50UHJpdmF0ZU5hbWUoKSk7CisgICAgQVNTRVJUKG1hcFNpemUu
YXNVSW50MzIoKSA+PSBkZWxldGVDb3VudC5hc1VJbnQzMigpKTsKKyAgICB1bnNpZ25lZCBudW1F
bGVtZW50cyA9IG1hcFNpemUuYXNVSW50MzIoKSAtIGRlbGV0ZUNvdW50LmFzVUludDMyKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihudW1FbGVtZW50cykpOwogfQogCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY1ZhbHVlcyhDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTE3NywxMSArMTg5LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXBQcm90b0Z1bgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRv
cjo6Y3JlYXRlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2Jq
ZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXkpKTsKIH0K
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihqc0R5bmFt
aWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7Ci19Ci0KIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUq
IGV4ZWMpCiB7CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
UHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwUHJvdG90eXBlLmgJKHJldmlzaW9uIDIwNDY1MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7
CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhl
Y1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRl
cmF0b3IoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVG
dW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSopOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286940</attachid>
            <date>2016-08-24 20:43:38 -0700</date>
            <delta_ts>2016-08-25 02:37:11 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>92630</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDQ5
MjYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQCBKYXZh
U2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyBcCiAgICAgJChKYXZhU2Ny
aXB0Q29yZSkvYnVpbHRpbnMvSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgXAogICAgICQo
SmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzIFwKKyAgICAkKEph
dmFTY3JpcHRDb3JlKS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcyBcCiAgICAgJChK
YXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3Jp
cHRDb3JlKS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNj
cmlwdENvcmUpL2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpzIFwKQEAgLTE0Niw2ICsxNDcs
NyBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAg
SlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIFwKICAgICBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQu
aCBcCisgICAgTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmggXAogICAgIE1hcFByb3RvdHlwZS5s
dXQuaCBcCiAgICAgTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oIFwKICAgICBOdW1iZXJDb25z
dHJ1Y3Rvci5sdXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTgsNyArMTE5OCw3IEBA
CiAJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QzFENTkwMUYyMDA5OUEx
QjYgLyogV0FTTVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RjFENTkwMjgyMDA5OUExQjYgLyog
V0FTTUIzSVJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9y
LmNwcCAqLzsgfTsKIAkJNTNGNDBFOTExRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkwMUQ1OTAz
MDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi87IH07Ci0gICAgICAgICAgICAgICAgNTNGNDBFOTMx
RDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyog
V0FTTUIzSVJHZW5lcmF0b3IuaCAqLzsgfTsKKwkJNTNGNDBFOTMxRDVBNEFCMzAwOTlBMUI2IC8q
IFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3Iu
aCAqLzsgfTsKIAkJNTNGNDBFOTUxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRTk3
MUQ1QTdCRUMwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAv
KiBXQVNNTW9kdWxlUGFyc2VyLmNwcCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVE
IC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8q
IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzg2LDcgKzMzODYsNyBAQAogCQk1M0Y0
MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXQVNNUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNQjNJUkdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBX
QVNNT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01PcHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLSAgICAgICAgICAgICAgICA1M0Y0MEU5MjFENUE0QUIz
MDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01CM0lSR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9k
dWxlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Nb2R1bGVQ
YXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOTYxRDVBN0JFQzAw
OTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0FTTU1vZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNTIwLDYgKzM1MjAsNyBAQAogCQk3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
N0IyNUNCMkMzMDk0QTkyQTM4RTFEQjMgLyogSlNNb2R1bGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb2R1bGVMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzkwMTA3MzcxRDY2OTc0QzAwNTgwNDIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MDVCQjY2MUQxMjA1MEUwMDE5RkU1NyAvKiBJ
bmxpbmVBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5s
aW5lQWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkwNUJCNjcxRDEy
MDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmxpbmVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkx
NjBEQkIxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5UmV2b2tlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU1NTgsNyArNTU1OSw3IEBACiAJCQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlB
MUI2IC8qIFdBU01PcHMuaCAqLywKIAkJCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FT
TUZvcm1hdC5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdl
bmVyYXRvci5jcHAgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzRjQwRTky
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovLAorCQkJCTUzRjQwRTky
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovLAogCQkJCTUzRjQwRThB
MUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1M0Y0MEU5
NjFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8sCiAJCQkJNTNGNDBF
OTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywKQEAgLTcwMDQsNiAr
NzAwNSw3IEBACiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlz
ZUNvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFw
UHJvdG90eXBlLmpzICovLAorCQkJCTc5MDEwNzM3MUQ2Njk3NEMwMDU4MDQyMiAvKiBNYXBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmpzICovLAogCQkJCUE1MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAv
KiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQlBMTVERTVDNTFDMEZCRjhEMDA4OTEzM0Qg
LyogTnVtYmVyUHJvdG90eXBlLmpzICovLApAQCAtNzk0NSw3ICs3OTQ3LDcgQEAKIAkJCQkwRkI1
NDY3NzE0RjU5QjVDMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk5REEwMEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmggaW4g
SGVhZGVycyAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTNGNDBFOTMxRDVB
NEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNTJFMEUxNkZDRTEwMEIzNDQ2MCAvKiBMZXhlci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDRjNENTZCMUNEMjk0NzIwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFCRkJFNTYxMDAzOEJCQ0Eg
LyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHJldmlzaW9uIDIwNDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsOCArOTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhjYXBhYmls
aXRpZXMpIFwKICAgICBtYWNybyhzdGFyRGVmYXVsdCkgXAogICAgIG1hY3JvKEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbikgXAotICAgIG1hY3JvKGdldCkgXAotICAgIG1hY3JvKHNldCkgXAogICAg
IG1hY3JvKHNoaWZ0KSBcCiAgICAgbWFjcm8oYWxsb2NhdGVUeXBlZEFycmF5KSBcCiAgICAgbWFj
cm8oSW50OEFycmF5KSBcCkBAIC0xMzQsNyArMTMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
bWFjcm8ocHJlZGljdEZpbmFsTGVuZ3RoRnJvbUFyZ3VtdW50cykgXAogICAgIG1hY3JvKHByaW50
KSBcCiAgICAgbWFjcm8oaXNTZXQpIFwKLSAgICBtYWNybyhpc01hcCkgXAogICAgIG1hY3JvKHJl
Z0V4cENyZWF0ZSkgXAogICAgIG1hY3JvKFNldEl0ZXJhdG9yKSBcCiAgICAgbWFjcm8oc2V0SXRl
cmF0b3JOZXh0KSBcCkBAIC0xNTgsNyArMTU1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1h
Y3JvKHJlZ0V4cFRlc3RGYXN0KSBcCiAgICAgbWFjcm8oc3RyaW5nSW5jbHVkZXNJbnRlcm5hbCkg
XAogICAgIG1hY3JvKHN0cmluZ1NwbGl0RmFzdCkgXAotICAgIG1hY3JvKHN0cmluZ1N1YnN0cklu
dGVybmFsKQorICAgIG1hY3JvKHN0cmluZ1N1YnN0ckludGVybmFsKSBcCisgICAgbWFjcm8obWFw
SGVhZCkgXAorICAgIG1hY3JvKG1hcFRhaWwpIFwKKyAgICBtYWNybyhtYXBUYWJsZSkgXAorICAg
IG1hY3JvKG1hcEhhc2gpIFwKKyAgICBtYWNybyhtYXBTaXplKSBcCisgICAgbWFjcm8obWFwRGVs
ZXRlQ291bnQpIFwKKyAgICBtYWNybyhtYXBCdWNrZXQpIFwKKyAgICBtYWNybyhtYXBJdGVyYXRp
b25LaW5kKSBcCiAKIAogI2RlZmluZSBJTklUSUFMSVpFX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZ
KG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjUHJpdmF0ZU5hbWUuaW1w
bCgpLCAmbV8jI25hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01h
cEl0ZXJhdG9yUHJvdG90eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwSXRlcmF0b3JQcm90b3R5cGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2Z1bmN0aW9uIG5leHQoKQoreworICAgIGxldCBsYXN0TWFwQnVja2V0
ID0gdGhpcy5AbWFwQnVja2V0OworICAgIGlmICghbGFzdE1hcEJ1Y2tldCkKKyAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIE1hcEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5v
bi1NYXBJdGVyYXRvciBvYmplY3QiKTsKKworICAgIGxldCBsaXN0TmV4dCA9IGxhc3RNYXBCdWNr
ZXQubGlzdE5leHQ7CisgICAgd2hpbGUgKGxpc3ROZXh0ICYmIGxpc3ROZXh0LmRlbGV0ZWQpCisg
ICAgICAgIGxpc3ROZXh0ID0gbGlzdE5leHQubGlzdE5leHQ7CisKKyAgICBpZiAobGlzdE5leHQp
IHsKKyAgICAgICAgdGhpcy5AbWFwQnVja2V0ID0gbGlzdE5leHQ7CisgICAgICAgIGlmICh0aGlz
LkBtYXBJdGVyYXRpb25LaW5kID09PSBAaXRlcmF0aW9uS2luZEtleVZhbHVlKQorICAgICAgICAg
ICAgcmV0dXJuIHtkb25lOiBmYWxzZSwgdmFsdWU6IFtsaXN0TmV4dC5rZXksIGxpc3ROZXh0LnZh
bHVlXX07CisgICAgICAgIGlmICh0aGlzLkBtYXBJdGVyYXRpb25LaW5kID09PSBAaXRlcmF0aW9u
S2luZEtleSkKKyAgICAgICAgICAgIHJldHVybiB7ZG9uZTogZmFsc2UsIHZhbHVlOiBsaXN0TmV4
dC5rZXl9OworICAgICAgICAvLyBWYWx1ZQorICAgICAgICByZXR1cm4ge2RvbmU6IGZhbHNlLCB2
YWx1ZTogbGlzdE5leHQudmFsdWV9OworICAgIH0KKyAgICByZXR1cm4ge2RvbmU6IHRydWV9Owor
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90eXBl
LmpzCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
TWFwUHJvdG90eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjgsNyBAQCBmdW5jdGlvbiBm
b3JFYWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovCiB7CiAgICAgInVzZSBzdHJpY3QiOwogCi0g
ICAgaWYgKCFAaXNNYXAodGhpcykpCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKICAgICAgICAg
dGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2Jq
ZWN0Iik7CiAKICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKQpAQCAtNDQs
MyArNDUsMjAwIEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8KICAg
ICAgICAgY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdmFsdWVbMV0sIHZhbHVlWzBdLCB0aGlzKTsK
ICAgICB9CiB9CisKK2Z1bmN0aW9uIGdldChrZXkpCit7CisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1h
cCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQgdGFibGUg
PSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4gPSB0YWJsZS5sZW5ndGg7IAorICAg
IGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkp
ICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgLy9sZXQgYWRkZXIg
PSAxOworICAgIHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgbGV0IGJ1Y2tldEtleSA9IGJ1Y2tl
dC5rZXk7CisgICAgICAgIGlmICgoYnVja2V0S2V5ID09PSBrZXkgfHwgKGJ1Y2tldEtleSAhPT0g
YnVja2V0S2V5ICYmIGtleSAhPT0ga2V5KSkgJiYgIWJ1Y2tldC5kZWxldGVkKQorICAgICAgICAg
ICAgcmV0dXJuIGJ1Y2tldC52YWx1ZTsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNr
OworICAgICAgICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioyKSAmIG1hc2s7CisgICAgICAgIGJ1
Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2FkZGVyKys7CisgICAgfQorICAgIHJldHVy
biBAdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBoYXMoa2V5KQoreworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVy
cm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0
IHRhYmxlID0gdGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3Ro
OyAKKyAgICBsZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhh
c2goa2V5KSAmIG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0
IGFkZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGxldCBidWNrZXRLZXkg
PSBidWNrZXQua2V5OworICAgICAgICBpZiAoKGJ1Y2tldEtleSA9PT0ga2V5IHx8IChidWNrZXRL
ZXkgIT09IGJ1Y2tldEtleSAmJiBrZXkgIT09IGtleSkpICYmICFidWNrZXQuZGVsZXRlZCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioy
KSAmIG1hc2s7CisgICAgICAgIGhhc2ggPSAoaGFzaCArIDEpICYgbWFzazsKKyAgICAgICAgYnVj
a2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgIC8vYWRkZXIrKzsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitmdW5jdGlvbiBkZWxldGUoa2V5KQoreworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9y
KCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHRh
YmxlID0gdGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3RoOyAK
KyAgICBsZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhhc2go
a2V5KSAmIG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0IGFk
ZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGxldCBidWNrZXRLZXkgPSBi
dWNrZXQua2V5OworICAgICAgICBpZiAoKGJ1Y2tldC5rZXkgPT09IGtleSB8fCAoYnVja2V0S2V5
ICE9PSBidWNrZXRLZXkgJiYga2V5ICE9PSBrZXkpICYmICFidWNrZXQuZGVsZXRlZCkgeworICAg
ICAgICAgICAgYnVja2V0LmRlbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnVja2V0Lmxpc3RO
ZXh0Lmxpc3RQcmV2ID0gYnVja2V0Lmxpc3RQcmV2OworICAgICAgICAgICAgYnVja2V0Lmxpc3RQ
cmV2Lmxpc3ROZXh0ID0gYnVja2V0Lmxpc3ROZXh0OworICAgICAgICAgICAgKyt0aGlzLkBtYXBE
ZWxldGVDb3VudDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsKKyAgICAgICAgaGFzaCA9IChoYXNo
ICsgMSkgJiBtYXNrOworICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9h
ZGRlcisrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisKK30KKworQGdsb2JhbFByaXZhdGUK
K2Z1bmN0aW9uIGpzTWFwUmVoYXNoKG1hcCwgb2xkTGVuKQoreworICAgIHRoaXMuQG1hcFNpemUg
PSB0aGlzLkBtYXBTaXplIC0gdGhpcy5AbWFwRGVsZXRlQ291bnQ7CisgICAgdGhpcy5AbWFwRGVs
ZXRlQ291bnQgPSAwOworICAgIGxldCBuZXdTaXplID0gb2xkTGVuICogMjsKKyAgICBsZXQgdGFi
bGUgPSBuZXcgQEFycmF5KG5ld1NpemUpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUu
bGVuZ3RoOyBpKyspCisgICAgICAgIHRhYmxlW2ldID0gQHVuZGVmaW5lZDsKKyAgICBtYXAuQG1h
cFRhYmxlID0gdGFibGU7CisgICAgbGV0IG1hc2sgPSBuZXdTaXplIC0gMTsKKyAgICBsZXQgbm9k
ZSA9IG1hcC5AbWFwSGVhZC5saXN0TmV4dDsKKyAgICBsZXQgbmV4dE5vZGUgPSBub2RlLmxpc3RO
ZXh0OworICAgIHdoaWxlIChuZXh0Tm9kZSkgeworICAgICAgICBsZXQga2V5ID0gbm9kZS5rZXk7
CisgICAgICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkpICYgbWFzazsKKyAgICAgICAgbGV0
IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2xldCBhZGRlciA9IDE7CisgICAgICAg
IHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIp
ICYgbWFzazsKKyAgICAgICAgICAgIGhhc2ggPSAoaGFzaCArIDEpICYgbWFzazsKKyAgICAgICAg
ICAgIGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAgICAgLy9hZGRlcisrOworICAgICAg
ICB9CisKKyAgICAgICAgdGFibGVbaGFzaF0gPSBub2RlOworICAgICAgICBub2RlID0gbmV4dE5v
ZGU7CisgICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUubGlzdE5leHQ7CisgICAgfQorfQorCitm
dW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAo
IUBpc0pTTWFwKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJh
dGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKKworICAgIGxldCB0YWJsZSA9IHRoaXMu
QG1hcFRhYmxlOworICAgIGxldCB0YWJsZUxlbiA9IHRhYmxlLmxlbmd0aDsgCisgICAgbGV0IG1h
c2sgPSB0YWJsZUxlbiAtIDE7CisgICAgbGV0IGhhc2ggPSBAanNNYXBIYXNoKGtleSkgJiBtYXNr
OworICAgIGxldCBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAvL2xldCBhZGRlciA9IDE7Cisg
ICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICBsZXQgYnVja2V0S2V5ID0gYnVja2V0LmtleTsK
KyAgICAgICAgaWYgKGJ1Y2tldC5rZXkgPT09IGtleSB8fCAoYnVja2V0S2V5ICE9PSBidWNrZXRL
ZXkgJiYga2V5ICE9PSBrZXkpKSB7CisgICAgICAgICAgICBidWNrZXQudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgICAgIGJ1Y2tldC5kZWxldGVkID0gZmFsc2U7IC8vIE1heWJlIHdlIHdlcmUgZGVs
ZXRlZCBiZWZvcmUsIGJ1dCB3ZSBhcmUgbm90IGFueW1vcmUuCisgICAgICAgICAgICArK3RoaXMu
QG1hcFNpemU7CisgICAgICAgICAgICAtLXRoaXMuQG1hcERlbGV0ZUNvdW50OworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIp
ICYgbWFzazsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAgICBidWNr
ZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisrOworICAgIH0KKworICAgIGxldCBt
YXBUYWlsID0gdGhpcy5AbWFwVGFpbDsKKyAgICBsZXQgbmV3SXRlbSA9IHsKKyAgICAgICAgbGlz
dE5leHQ6IG1hcFRhaWwsCisgICAgICAgIGxpc3RQcmV2OiBtYXBUYWlsLmxpc3RQcmV2LAorICAg
ICAgICBrZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICBkZWxldGVkOiBm
YWxzZQorICAgIH07CisgICAgbWFwVGFpbC5saXN0UHJldiA9IG5ld0l0ZW07CisgICAgbmV3SXRl
bS5saXN0UHJldi5saXN0TmV4dCA9IG5ld0l0ZW07CisKKyAgICB0YWJsZVtoYXNoXSA9IG5ld0l0
ZW07CisKKyAgICBsZXQgbmV3U2l6ZSA9ICsrdGhpcy5AbWFwU2l6ZTsKKyAgICBpZiAoMiAqIG5l
d1NpemUgPiB0YWJsZUxlbikgeyAvLyBEbyBpbnQgbXVscyBhbmQgY29tcGFyZS4gVGhpcyBpcyBq
dXN0IGNoZWNraW5nIGlmIHdlJ3JlIGZpbGxlZCB1cCBtb3JlIHRoYW4gMS8yLgorICAgICAgICBA
anNNYXBSZWhhc2godGhpcywgdGFibGVMZW4pOworICAgIH0gCit9CisKK2Z1bmN0aW9uIGNsZWFy
KGtleSwgdmFsdWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0
aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVk
IG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICB0aGlzLkBtYXBUYWJsZSA9IEBuZXdBcnJheVdp
dGhTaXplKDQpOworICAgIHRoaXMuQG1hcFRhaWwubGlzdFByZXYgPSB0aGlzLkBtYXBIZWFkOwor
ICAgIHRoaXMuQG1hcEhlYWQubGlzdE5leHQgPSB0aGlzLkBtYXBUYWlsOworICAgIHRoaXMuQG1h
cFNpemUgPSAwOworICAgIHRoaXMuQG1hcERlbGV0ZUNvdW50ID0gMDsKK30KKworZnVuY3Rpb24g
bGlzdEFzQXJyYXkoKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzSlNNYXAo
dGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxl
ZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHJlc3VsdCA9IFtdOworCisgICAgbGV0
IGJ1Y2tldCA9IHRoaXMuQG1hcEhlYWQ7CisgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICBy
ZXN1bHQucHVzaCh7CisgICAgICAgICAgICBrZXk6IGJ1Y2tldC5rZXkgfHwgIkVNUFRZIiwKKyAg
ICAgICAgICAgIHZhbHVlOiBidWNrZXQudmFsdWUgfHwgIkVNUFRZIgorICAgICAgICB9KTsKKyAg
ICAgICAgYnVja2V0ID0gYnVja2V0Lmxpc3ROZXh0OworICAgIH0KKyAgICByZXR1cm4geworICAg
ICAgICB0YWJsZUxlbmd0aDogdGhpcy5AbWFwVGFibGUubGVuZ3RoLAorICAgICAgICBtYXBTaXpl
OiB0aGlzLkBtYXBTaXplLAorICAgICAgICBhcnJheTogcmVzdWx0CisgICAgfTsKK30KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksOCBAQCBjbGFzcyBJZGVudGlmaWVyOwogICAgIG1hY3JvKHRvTnVtYmVy
KSBcCiAgICAgbWFjcm8odG9TdHJpbmcpIFwKICAgICBtYWNybyhuZXdBcnJheVdpdGhTaXplKSBc
CisgICAgbWFjcm8oanNNYXBIYXNoKSBcCisgICAgbWFjcm8oaXNKU01hcCkgXAogCiAjZGVmaW5l
IEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUobWFjcm8p
IFwKICAgICBtYWNybyh1bmRlZmluZWQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDIwNDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfbnVt
YmVyIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19zdHJp
bmciLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2pzYXJy
YXkiLCAibGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2pzbWFw
IiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19vYmplY3Qi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX29iamVjdF9v
cl9udWxsIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19m
dW5jdGlvbiIsICJsZW5ndGgiIDogMyB9LApAQCAtMTQ3LDcgKzE0OCw4IEBACiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9yZXN1bWUiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3dhdGNoZG9nIiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUiLCAibGVuZ3RoIiA6IDJ9LAot
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwiLCAibGVu
Z3RoIiA6IDN9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbCIsICJsZW5ndGgiIDogM30sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9qc21hcF9o
YXNoIiwgImxlbmd0aCIgOiAzIH0KICAgICAgICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlz
aW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDcgQEAgdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgogICAgIGNhc2Ugb3Bf
aXNfc3RyaW5nOgogICAgIGNhc2Ugb3BfaXNfanNhcnJheToKKyAgICBjYXNlIG9wX2lzX2pzbWFw
OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6
CiAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKQEAgLTE5MCw2ICsxOTEsNyBAQCB2b2lkIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgog
ICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICBjYXNlIG9wX2pzbWFwX2hhc2g6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1
bWVudHM6IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdID4gMik7CiAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CkBAIC00MTksNiArNDIxLDcgQEAgdm9pZCBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgogICAgIGNhc2Ug
b3BfaXNfc3RyaW5nOgogICAgIGNhc2Ugb3BfaXNfanNhcnJheToKKyAgICBjYXNlIG9wX2lzX2pz
bWFwOgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251
bGw6CiAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKQEAgLTQ2NCw2ICs0NjcsNyBAQCB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF91bnNpZ25lZDoK
ICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czogCiAgICAgY2FzZSBvcF9jcmVhdGVfcmVz
dDoKKyAgICBjYXNlIG9wX2pzbWFwX2hhc2g6CiAgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6
IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdID4gMSk7CiAgICAgICAg
IGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTksNiArMTExOSwxNCBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgcHJpbnRVbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfanNhcnJheSIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19qc21hcDogeworICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfanNtYXAiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfanNtYXBfaGFzaDogewor
ICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAianNtYXBf
aGFzaCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9p
c19vYmplY3Q6IHsKICAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImlzX29iamVjdCIpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzMCw2ICs2MzAsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRvSW5kZXhTdHJpbmcoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdElzSlNBcnJheShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4g
ZW1pdFVuYXJ5T3Aob3BfaXNfanNhcnJheSwgZHN0LCBzcmMpOyB9CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRJc0pTTWFwKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVy
biBlbWl0VW5hcnlPcChvcF9pc19qc21hcCwgZHN0LCBzcmMpOyB9CisgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRKU01hcEhhc2goUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0
dXJuIGVtaXRVbmFyeU9wKG9wX2pzbWFwX2hhc2gsIGRzdCwgc3JjKTsgfQogICAgICAgICBSZWdp
c3RlcklEKiBlbWl0SXNPYmplY3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNFbXB0eShSZWdpc3RlcklE
KiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2NCw2ICs5NjQsMjcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRy
aW5zaWNOb2RlOjplbWl0XwogICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uLmdldCgpOwogfQog
CitSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX2pzTWFw
SGFzaChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIEpTQzo6UmVnaXN0ZXJJRCog
ZHN0KQoreworICAgIEFyZ3VtZW50TGlzdE5vZGUqIG5vZGUgPSBtX2FyZ3MtPm1fbGlzdE5vZGU7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHNpemUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7
CisgICAgQVNTRVJUKCFub2RlLT5tX25leHQpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZp
bmFsRGVzdGluYXRpb24gPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgIGdl
bmVyYXRvci5lbWl0SlNNYXBIYXNoKGZpbmFsRGVzdGluYXRpb24uZ2V0KCksIHNpemUuZ2V0KCkp
OworICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uLmdldCgpOworfQorCitSZWdpc3RlcklEKiBC
eXRlY29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX2lzSlNNYXAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBKU0M6OlJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBBcmd1
bWVudExpc3ROb2RlKiBub2RlID0gbV9hcmdzLT5tX2xpc3ROb2RlOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzaXplID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUpOworICAgIEFTU0VSVCghbm9k
ZS0+bV9uZXh0KTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9uID0g
Z2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBnZW5lcmF0b3IuZW1pdElzSlNN
YXAoZmluYWxEZXN0aW5hdGlvbi5nZXQoKSwgc2l6ZS5nZXQoKSk7CisgICAgcmV0dXJuIGZpbmFs
RGVzdGluYXRpb24uZ2V0KCk7Cit9CiAKICNkZWZpbmUgSlNDX0RFQ0xBUkVfQllURUNPREVfSU5U
UklOU0lDX0NPTlNUQU5UX0dFTkVSQVRPUlMobmFtZSkgXAogICAgIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfIyNuYW1lKEJ5dGVjb2RlR2VuZXJhdG9y
JiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMyLDYgKzEwMzIsMTgg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBicmVh
azsKICAgICB9CiAKKyAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgIGNhc2UgSlNNYXBIYXNo
OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMyT25seSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElzRW1wdHlKU01h
cEJ1Y2tldDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNCb29sZWFuKTsKKyAg
ICAgICAgYnJlYWs7CisKKwogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzSlNBcnJheToK
ICAgICBjYXNlIElzVW5kZWZpbmVkOgpAQCAtMTA0Miw2ICsxMDU0LDcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgSXNPYmplY3RPck51bGw6CiAg
ICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgIGNhc2UgSXNSZWdFeHBPYmplY3Q6CisgICAgY2FzZSBJ
c0pTTWFwOgogICAgIGNhc2UgSXNUeXBlZEFycmF5VmlldzogewogICAgICAgICBBYnN0cmFjdFZh
bHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmIChjaGlsZC52
YWx1ZSgpKSB7CkBAIC0xMDUwLDYgKzEwNjMsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBjYXNlIElzSlNBcnJheToKICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQudmFsdWUoKS5pc09iamVjdCgp
ICYmIGNoaWxkLnZhbHVlKCkuZ2V0T2JqZWN0KCktPnR5cGUoKSA9PSBBcnJheVR5cGUpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQudmFsdWUoKS5pc09iamVj
dCgpICYmIGNoaWxkLnZhbHVlKCkuZ2V0T2JqZWN0KCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAg
ICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKAogICAgICAgICAgICAg
ICAgICAgICBjaGlsZC52YWx1ZSgpLmlzQ2VsbCgpCkBAIC0xMjkxLDYgKzEzMDcsOSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIElzSlNNYXA6CisgICAgICAgICAgICBicmVh
azsKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzNyw2ICsyNTM3LDM0IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGdldChvcGVyYW5kKSk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KKworICAgIGNhc2UgSlNNYXBHZXRJbnRyaW5zaWM6IHsKKyAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICAvL3NldChWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgoQXJpdGhTcXJ0LCBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKSkpOworICAgICAgICBOb2RlKiBt
YXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsK
KyAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKEpTTWFwSGFz
aCwga2V5KTsKKyAgICAgICAgTm9kZSogbG9hZGVkQnVja2V0SW5kZXggPSBhZGRUb0dyYXBoKEdl
dEpTTWFwQnVja2V0LCBtYXAsIGtleSwgaGFzaCk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFk
ZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgbWFwLCBsb2FkZWRCdWNrZXRJbmRleCk7Cisg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vZGF0YUxvZygiTWFwIGdldCBpbnRyaXNuaWNc
biIpOworICAgICAgICAvL21hY3JvKEdldEpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SW50MzIpIFwK
KyAgICAgICAgLy9tYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAg
ICAgICAgLy9tYWNybyhJc0VtcHR5SlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRCb29sZWFuKSBcCisK
KyAgICAgICAgLy9HZXRKU01hcEJ1Y2tldAorICAgICAgICAvL0xvYWRGcm9tSlNNYXBCdWNrZXQK
KyAgICAgICAgLy9Jc0VtcHR5SlNNYXBCdWNrZXQKKyAgICB9CisKKyAgICBjYXNlIEpTTWFwSGFz
SW50cmluc2ljOiB7CisgICAgICAgIGRhdGFMb2coIk1hcCBoYXMgaW50cmlzbmljXG4iKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KICAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0OCw2ICszOTc2LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2pz
YXJyYXkpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9pc19qc21hcDogeworICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSXNKU01hcCwgdmFsdWUpKTsK
KyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2pzbWFwKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhc2Ugb3BfanNtYXBfaGFzaDogeworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoSlNNYXBIYXNoLCB2YWx1ZSkpOworICAgICAgICAgICAgTkVYVF9PUENP
REUob3BfanNtYXBfaGFzaCk7CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIG9wX2lzX29iamVj
dDogewogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSXNPYmpl
Y3QsIHZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsNyBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF9p
c19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19zdHJpbmc6CiAgICAgY2FzZSBvcF9pc19qc2FycmF5
OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CiAgICAgY2FzZSBvcF9pc19vYmplY3Q6CiAgICAgY2Fz
ZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoKICAgICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAtMjQ1
LDYgKzI0Niw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAg
ICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgogICAgIGNhc2Ugb3BfcHV0X3RvX3Nj
b3BlOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAgICBjYXNlIG9wX2pzbWFwX2hhc2g6
CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5lOwogCiAgICAgY2FzZSBvcF9uZXdf
cmVnZXhwOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYyLDcgQEAgdm9pZCBjbG9iYmVyaXpl
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAg
IGNhc2UgQ29tcGFyZUVxUHRyOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01h
cDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElz
Qm9vbGVhbjoKQEAgLTE5OCw2ICsxOTksMjggQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZQogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKIAorICAgIGNhc2UgSlNN
YXBIYXNoOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAg
ICAgICAgRWRnZSYgbWFwRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICBFZGdlJiBrZXlF
ZGdlID0gbm9kZS0+Y2hpbGQyKCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSlNNYXBCdWNr
ZXRJbmRleExvYywgTWlzY0ZpZWxkcywgbWFwRWRnZSwga2V5RWRnZSksIExhenlOb2RlKG5vZGUp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6
IHsKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgRWRnZSYgbWFwRWRnZSA9IG5v
ZGUtPmNoaWxkMSgpOworICAgICAgICBFZGdlJiBidWNrZXRJbmRleEVkZ2UgPSBub2RlLT5jaGls
ZDIoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEdldExvYywgTWlzY0ZpZWxkcywg
bWFwRWRnZSwgYnVja2V0SW5kZXhFZGdlKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNhc2UgSXNFbXB0eUpTTWFwQnVja2V0OgorICAgICAgICByZWFkKE1p
c2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwSGFzTG9jLCBNaXNjRmll
bGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoKICAgICBjYXNlIEJpdFhvcjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNDky
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgog
ICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01hcDoKICAgICBjYXNlIElzRW1wdHk6
CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTE4NSw2ICsx
ODYsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2Ug
Rm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgIGNhc2UgU3Ry
aW5nRnJvbUNoYXJDb2RlOgorICAgIGNhc2UgSlNNYXBIYXNoOgorICAgIGNhc2UgR2V0SlNNYXBC
dWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNFbXB0eUpT
TWFwQnVja2V0OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50
cnlMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTQwLDYgKzE1NDAsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKKyAgICAgICAgY2FzZSBJc0pTTWFwOiB7CisgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAgICBmaXhFZGdl
PENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2Vs
bFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxVbnR5cGVkVXNlPihu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGls
ZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBC
dWNrZXQ6CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIElzRW1wdHlKU01hcEJ1Y2tldDoKKyAgICAgICAgICAgIGZp
eEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2Vs
bFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1
cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgog
ICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgpAQCAtMTYxMSw2ICsxNjMyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgY2FzZSBQdXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIEdldEJ5VmFsV2l0
aFRoaXM6CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxUHRyOgorICAgICAgICBjYXNlIEpTTWFwSGFz
aDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJ
KHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExv
Y2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0MywxNSBAQCB2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBSZWdFeHBPYmplY3RMYXN0
SW5kZXhMb2M6CiAgICAgICAgIG91dC5wcmludCgiUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jIik7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTTWFwQnVja2V0SW5kZXhMb2M6CisgICAgICAg
IG91dC5wcmludCgiSlNNYXBCdWNrZXRJbmRleExvYyIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBKU01hcEdldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcEdldExvYyIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBKU01hcEhhc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJK
U01hcEhhc0xvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDEw
IEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZWRBcnJh
eUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2MsCi0gICAgU3RhY2tQYXlsb2FkTG9jCisgICAg
U3RhY2tQYXlsb2FkTG9jLAorICAgIEpTTWFwQnVja2V0SW5kZXhMb2MsCisgICAgSlNNYXBHZXRM
b2MsCisgICAgSlNNYXBIYXNMb2MKIH07CiAKIGNsYXNzIEhlYXBMb2NhdGlvbiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMDQ5MjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwOSw2ICszMDksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oSW5zdGFuY2VPZkN1c3RvbSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRCb29s
ZWFuKSBcCiAgICAgXAogICAgIG1hY3JvKElzSlNBcnJheSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwK
KyAgICBtYWNybyhJc0pTTWFwLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzRW1w
dHksIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNVbmRlZmluZWQsIE5vZGVSZXN1
bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNCb29sZWFuLCBOb2RlUmVzdWx0Qm9vbGVhbikgXApA
QCAtMzg4LDcgKzM4OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3Vs
dEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRvSW5k
ZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKKyAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVz
dWx0SlMpIFwKKyAgICAvKiBIYXNoaW5nIGZvciBKU01hcCAqLyBcCisgICAgbWFjcm8oSlNNYXBI
YXNoLCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhHZXRKU01hcEJ1Y2tldCwgTm9kZVJl
c3VsdEludDMyKSBcCisgICAgbWFjcm8oTG9hZEZyb21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpT
KSBcCisgICAgbWFjcm8oSXNFbXB0eUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAog
CiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZv
ciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0g
dG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgog
I2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2lu
Y2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtMTc2Nyw2ICsxNzY4LDE3IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmEKICAgICBzY29wZS0+bWV0aG9kVGFibGUo
KS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgc2xvdCk7
CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEhhc2goRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNWYWx1ZShqc01hcEhhc2goZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGlu
cHV0KSkpOworICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIHJlc3VsdC5hc0ludDMyKCk7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhp
dEJhc2UqIGV4aXQpCiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNDky
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xODQsNiArMTg0LDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIGRlYnVnT3BlcmF0
aW9uUHJpbnRTcAogCiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93
KENvZGVCbG9jayosIE9TUkV4aXRCYXNlKikgV1RGX0lOVEVSTkFMOwogCitpbnQzMl90IEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSlNNYXBIYXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGlu
cHV0KTsKKwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiBkb3VibGUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25SYW5kb20oSlNHbG9iYWxPYmplY3QqKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NDQs
NiArNzQ0LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisg
ICAgICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEpTTWFwQnVja2V0
OgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICAv
LyBGSVhNRTogdXNlIHRoZSBjYWxscyB2YWx1ZSBwcm9maWxlciBoZXJlLgorICAgICAgICAgICAg
c2V0UHJlZGljdGlvbihTcGVjQnl0ZWNvZGVUb3ApOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSXNFbXB0eUpTTWFwQnVja2V0OgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihT
cGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEdldFJlc3RM
ZW5ndGg6IHsKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTc4Nyw2ICs4MDEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNl
IEluc3RhbmNlT2Y6CiAgICAgICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICAgICAgY2Fz
ZSBJc0pTQXJyYXk6CisgICAgICAgIGNhc2UgSXNKU01hcDoKICAgICAgICAgY2FzZSBJc0VtcHR5
OgogICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgICAgICBjYXNlIElzQm9vbGVhbjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZp
c2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1OCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0
ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJ
bnN0YW5jZU9mQ3VzdG9tOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01hcDoK
ICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9v
bGVhbjoKQEAgLTM1NSw2ICszNTYsMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3Rh
dGVUeXBlJiBzdAogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoKICAgICBjYXNlIFB1dER5bmFtaWNW
YXI6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6CisgICAgY2FzZSBKU01hcEhhc2g6CisgICAgY2Fz
ZSBHZXRKU01hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2Fz
ZSBJc0VtcHR5SlNNYXBCdWNrZXQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBC
b3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzks
NiArMzksNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Vudmlyb25t
ZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRl
ICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1
ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCkBA
IC00Nyw2ICs0OCw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAi
V2F0Y2hkb2cuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDY1
MSw2ICs0NjU0LDgzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBJc0pTTWFwOiB7CisgICAgICAgIGNv
bXBpbGVJc0pTTWFwKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEpT
TWFwSGFzaDogeworICAgICAgICBjb21waWxlSlNNYXBIYXNoKG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBrZXkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9w
ZXJhbmQgaGFzaCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBt
YXNrKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgaW5kZXgodGhpcyk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBidWZmZXIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBidWNrZXQodGhp
cyk7CisKKyAgICAgICAgR1BSUmVnIGhhc2hHUFIgPSBoYXNoLmdwcigpOworICAgICAgICBHUFJS
ZWcgbWFwR1BSID0gbWFwLmdwcigpOworICAgICAgICBHUFJSZWcgbWFza0dQUiA9IG1hc2suZ3By
KCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJS
ZWcgYnVmZmVyR1BSID0gYnVmZmVyLmdwcigpOworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0g
YnVja2V0LmdwcigpOworICAgICAgICBHUFJSZWcga2V5R1BSID0ga2V5LmdwcigpOworICAgICAg
ICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtYXBHUFIs
IE9CSkVDVF9PRkZTRVRPRihKU01hcCwgbV9tYXApICsgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJ
bXBsLCBtX2J1ZmZlcikpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobWFwR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNNYXAsIG1fbWFwKSAr
IE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbCwgbV9jYXBhY2l0eSkpLCBtYXNrR1BSKTsKKyAg
ICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXNrR1BSKTsKKyAgICAgICAgbV9q
aXQubW92ZShoYXNoR1BSLCBpbmRleEdQUik7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICBtX2ppdC5hbmQzMihtYXNrR1BSLCBp
bmRleEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eChidWZmZXJHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIGJ1Y2tl
dEdQUik7CisgICAgICAgIGF1dG8gbm90UHJlc2VudEluVGFibGUgPSBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZElt
bVB0cihIYXNoTWFwSW1wbDo6ZW1wdHlWYWx1ZSgpKSk7CisgICAgICAgIGF1dG8gaXNEZWxldGVk
VmFsdWUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDo6ZGVsZXRlZFZhbHVlKCkp
KTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVja2V0
R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwga2V5KSksIGJ1Y2tldEdQUik7Cisg
ICAgICAgIC8vIEZJWE1FOiBkbyBhIHRydWUgT2JqZWN0LmlzIGNvbXBhcmlzb24gaGVyZSEKKyAg
ICAgICAgYXV0byBkb25lID0gbV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBi
dWNrZXRHUFIsIGtleUdQUik7CisgICAgICAgIGlzRGVsZXRlZFZhbHVlLmxpbmsoJm1faml0KTsK
KyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUik7CisgICAgICAg
IG1faml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJm1faml0KTsKKworICAgICAgICBub3RQcmVzZW50
SW5UYWJsZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKFVJ
TlRfTUFYKSwgaW5kZXhHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAg
aW50MzJSZXN1bHQoaW5kZXhHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFu
ZCBidWNrZXRJbmRleCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEluZGV4R1BSID0gYnVja2V0SW5kZXguZ3ByKCk7CisgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0byBub3RCdWNr
ZXQgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGJ1Y2tldEluZGV4R1BS
LCBUcnVzdGVkSW1tMzIoVUlOVF9NQVgpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtYXBHUFIsIE9CSkVDVF9PRkZTRVRPRihKU01hcCwgbV9tYXApICsg
T0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsLCBtX2J1ZmZlcikpLCByZXN1bHRHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgocmVzdWx0R1BSLCBi
dWNrZXRJbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgdmFsdWUpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIG5vdEJ1Y2tldC5saW5rKCZt
X2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSksIHJlc3VsdEdQUik7CisgICAgICAgIGRv
bmUubGluaygmbV9qaXQpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIElzRW1wdHlKU01hcEJ1Y2tldDogewor
ICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjEzLDYgKzM2MTMsOTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUlzSlNBcnJheShObwogICAgIGJsZXNzZWRCb29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9k
ZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTTWFwKE5vZGUqIG5vZGUp
Cit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSXNKU01hcCk7CisgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5j
b21wYXJlOChKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcyh2YWx1ZUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgICAg
ICBUcnVzdGVkSW1tMzIoSlNNYXBUeXBlKSwKKyAgICAgICAgICAgIHJlc3VsdEdQUik7CisgICAg
ICAgIGJsZXNzQm9vbGVhbihyZXN1bHRHUFIpOworICAgICAgICBibGVzc2VkQm9vbGVhblJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlQobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJGbHVzaGVk
Q2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICBKU1ZhbHVlUmVncyB2YWx1ZVJlZ3MgPSB2
YWx1ZS5qc1ZhbHVlUmVncygpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENl
bGwodmFsdWVSZWdzKTsKKworICAgIG1faml0LmNvbXBhcmU4KEpJVENvbXBpbGVyOjpFcXVhbCwK
KyAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVSZWdzLnBheWxvYWRHUFIoKSwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihKU01hcFR5
cGUpLAorICAgICAgICByZXN1bHRHUFIpOworICAgIGJsZXNzQm9vbGVhbihyZXN1bHRHUFIpOwor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBpc05vdENl
bGwubGluaygmbV9qaXQpOworICAgIG1vdmVGYWxzZVRvKHJlc3VsdEdQUik7CisKKyAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUp
OworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSlNNYXBIYXNoKE5vZGUqIG5vZGUp
Cit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSlNNYXBIYXNoKTsKKworICAgIEpTVmFsdWVP
cGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGlu
cHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc3RyYWlnaHRIYXNoOworICAgIGF1dG8gaXNOb3RDZWxsID0gbV9qaXQuYnJh
bmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU1N0cmluZzo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1wbDo6
ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQudXJzaGlmdDY0KE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIHJlc3VsdEdQUik7CisgICAgc2xvd1BhdGguYXBwZW5k
KG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7Cisg
ICAgYXV0byBkb25lMiA9IG1faml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKCZtX2pp
dCk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihpbnB1
dEdQUikpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1Zh
bHVlUmVncyhpbnB1dEdQUikpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgpKTsK
KworICAgIHN0cmFpZ2h0SGFzaC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShpbnB1dEdQ
UiwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5qc01hcEhhc2gocmVzdWx0R1BSLCB0ZW1wR1BSKTsK
KyAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZtX2pp
dCk7CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkpTTWFwSGFzaCwgcmVzdWx0R1BSLCBpbnB1dEdQUik7CisgICAgc2ls
ZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CisKKyAgICBkb25lMi5saW5rKCZtX2ppdCk7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NTYsNiArNzU2LDggQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUluc3RhbmNlT2ZD
dXN0b20oTm9kZSopOwogCiAgICAgdm9pZCBjb21waWxlSXNKU0FycmF5KE5vZGUqKTsKKyAgICB2
b2lkIGNvbXBpbGVJc0pTTWFwKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVKU01hcEhhc2goTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqKTsKICAgICB2b2lkIGNv
bXBpbGVJc1R5cGVkQXJyYXlWaWV3KE5vZGUqKTsKIApAQCAtMTY3MSw2ICsxNjczLDEyIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICB9CiAKKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRD
YWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWlogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQgYXJnMykKICAg
ICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVz
dGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MCw2ICsxODAsOCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBp
bGUoTm9kZSogCiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgIGNhc2UgVW5yZWFj
aGFibGU6CiAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgY2FzZSBJc0pTTWFwOgorICAgIGNhc2Ug
SlNNYXBIYXNoOgogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAg
IGNhc2UgSXNCb29sZWFuOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTgsNiArODk4
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29t
cGlsZUlzSlNBcnJheSgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNKU01h
cDoKKyAgICAgICAgICAgIGNvbXBpbGVJc0pTTWFwKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBKU01hcEhhc2g6CisgICAgICAgICAgICBjb21waWxlSlNNYXBIYXNoKCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgICAgIGNv
bXBpbGVJc09iamVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MzAxLDYgKzYzMDcsMTI3
IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxs
UmVzdWx0LCBjZWxsUmVzdWx0KSk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlSlNNYXBIYXNo
KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIHN0cmFpZ2h0SGFzaCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGlzTnVtYmVyQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGlzU3RyaW5nQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IG5vbkVtcHR5U3RyaW5nQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQx
KCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUobm90Q2VsbCkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdD
YXNlKTsKKyAgICAgICAgTFZhbHVlIGlzU3RyaW5nID0gbV9vdXQuZXF1YWwobV9vdXQubG9hZDha
ZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksIG1fb3V0LmNvbnN0
SW50MzIoU3RyaW5nVHlwZSkpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBp
c1N0cmluZywgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVuc3VyZShzdHJhaWdodEhhc2gpKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nhc2UsIG5vbkVtcHR5U3RyaW5nQ2FzZSk7
CisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFw
cy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1f
b3V0LmVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0SW50UHRyKDApKSwgcmFyZWx5KHNsb3dD
YXNlKSwgdXN1YWxseShub25FbXB0eVN0cmluZ0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhub25FbXB0eVN0cmluZ0Nhc2UsIG5vdENlbGwpOworICAgICAgICBMVmFsdWUgaGFzaCA9
IG1fb3V0LmxTaHIobV9vdXQubG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9o
YXNoQW5kRmxhZ3MpLCBtX291dC5jb25zdEludDMyKDYpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhhc2gpOworICAgICAg
ICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoaGFzaCwgbV9vdXQuY29uc3RJbnQzMigwKSksCisg
ICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGwsIGlzTnVtYmVyQ2FzZSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzTnVtYmVyKHZhbHVlKSwgdW5zdXJlKGlzTnVtYmVy
Q2FzZSksIHVuc3VyZShzdHJhaWdodEhhc2gpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhp
c051bWJlckNhc2UsIHN0cmFpZ2h0SGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgIGlzSW50MzIodmFsdWUpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSwgdW5zdXJlKHNsb3dD
YXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyYWlnaHRIYXNoLCBzbG93Q2FzZSk7
CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIExWYWx1ZSBrZXkgPSB2
YWx1ZTsKKyAgICAgICAgTFZhbHVlIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5z
aGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigzMikpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0
Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAg
Ly8ga2V5IF49IChrZXkgPj4gMjIpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1w
ID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDIyKSk7CisgICAgICAgIGtleSA9
IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMTMp
OworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1f
b3V0LmNvbnN0SW50MzIoMTMpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsK
KyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAo
a2V5ID4+IDgpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNo
cih0ZW1wLCBtX291dC5jb25zdEludDMyKDgpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9y
KGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICB0ZW1w
ID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIo
MykpOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5
IF49IChrZXkgPj4gMTUpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9v
dXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDE1KSk7CisgICAgICAgIGtleSA9IG1fb3V0
LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAg
ICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNv
bnN0SW50MzIoMjcpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAg
ICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+
IDMxKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVt
cCwgbV9vdXQuY29uc3RJbnQzMigzMSkpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5
LCB0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuY2FzdFRvSW50MzIoa2V5KTsKKworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGtleSk7CisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93
Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIHZtQ2FsbChJbnQzMiwgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbkpTTWFwSGFzaCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShJbnQzMiwgZmFzdFJl
c3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0KSk7CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlSXNKU01hcCgpCisgICAgeworICAgICAgICBpZiAobV9ub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIHNldEJvb2xlYW4obV9vdXQu
ZXF1YWwoCisgICAgICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1faGVh
cHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
MihKU01hcFR5cGUpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNl
KTsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsK
KworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBub3RDZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmJv
b2xlYW5GYWxzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2
YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwg
dW5zdXJlKGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgY2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5lcXVhbCgKKyAgICAgICAg
ICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5
cGUpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihKU01hcFR5cGUpKSk7CisgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0Qm9vbGVhbihtX291dC5waGkoSW50MzIs
IG5vdENlbGxSZXN1bHQsIGNlbGxSZXN1bHQpKTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVJ
c09iamVjdE9yTnVsbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
cmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjYsNiArNjI2LDUwIEBAIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwKICAgICAgICAgfSk7CiB9CiAKK3ZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpqc01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2Ny
YXRjaCkKK3sKKyAgICBHUFJSZWcgaW5wdXQgPSBpbnB1dEFuZFJlc3VsdDsKKyAgICAvLyBrZXkg
Kz0gfihrZXkgPDwgMzIpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0
KFRydXN0ZWRJbW0zMigzMiksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFk
ZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgbW92
ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigyMiksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwg
MTMpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigxMyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gs
IGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiA4KTsKKyAgICBtb3ZlKGlucHV0LCBzY3Jh
dGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDgpLCBzY3JhdGNoKTsKKyAgICB4b3I2
NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7CisgICAgbW92ZShp
bnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMpLCBzY3JhdGNoKTsK
KyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gMTUpOwor
ICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoMTUp
LCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5ICs9IH4o
a2V5IDw8IDI3KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMjcpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsKKyAgICBhZGQ2NChz
Y3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gMzEpOworICAgIG1vdmUoaW5w
dXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoKTsK
KyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisKKyAgICAvLyBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2NChUcnVzdGVkSW1tUHRyKG1hc2sp
LCBpbnB1dEFuZFJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8g
RU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9B
c3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsOCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJ
VENvZGU6Ok5vbmUgfHwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobV9iYXNlbGluZUNvZGVCbG9j
ay0+aml0VHlwZSgpKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lkIGpzTWFwSGFzaChH
UFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKTsKICAgICAKICAgICBDb2RlQmxv
Y2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgVk0qIHZtKCkgeyBy
ZXR1cm4gbV92bTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24g
MjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNjMsNiArMjYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3Mo
KQogICAgICAgICBERUZJTkVfT1Aob3BfaXNfbnVtYmVyKQogICAgICAgICBERUZJTkVfT1Aob3Bf
aXNfc3RyaW5nKQogICAgICAgICBERUZJTkVfT1Aob3BfaXNfanNhcnJheSkKKyAgICAgICAgREVG
SU5FX09QKG9wX2lzX2pzbWFwKQogICAgICAgICBERUZJTkVfT1Aob3BfaXNfb2JqZWN0KQogICAg
ICAgICBERUZJTkVfT1Aob3BfamVxX251bGwpCiAgICAgICAgIERFRklORV9PUChvcF9qZmFsc2Up
CkBAIC0zNTMsNiArMzU0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICAgICAgCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJv
bG9ndWUpCiAgICAgICAgIERFRklORV9PUChvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCkKKyAg
ICAgICAgREVGSU5FX09QKG9wX2pzbWFwX2hhc2gpCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTUyNSw2ICs1MjUsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2lzX251bWJlcihJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfaXNfc3RyaW5nKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9pc19qc2FycmF5KEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgZW1pdF9v
cF9pc19qc21hcChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfb2JqZWN0
KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfamZhbHNlKEluc3RydWN0aW9uKik7CkBAIC02MDcs
NiArNjA4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF90b19pbmRl
eF9zdHJpbmcoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2xvZ19zaGFkb3df
Y2hpY2tlbl9wcm9sb2d1ZShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9n
X3NoYWRvd19jaGlja2VuX3RhaWwoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29w
X2pzbWFwX2hhc2goSW5zdHJ1Y3Rpb24qKTsKIAogICAgICAgICB2b2lkIGVtaXRTbG93X29wX2Fk
ZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKICAgICAg
ICAgdm9pZCBlbWl0U2xvd19vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw2ICsyNzgsNjEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfanNhcnJheShJbnN0cnVjdGlvbgogICAgIGVtaXRQdXRWaXJ0dWFsUmVn
aXN0ZXIoZHN0KTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfaXNfanNtYXAoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworCisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOworICAg
IEp1bXAgaXNOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBjb21w
YXJlOChFcXVhbCwgQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihKU01hcFR5cGUpLCByZWdUMCk7CisgICAgZW1pdFRhZ0Jvb2wocmVnVDAp
OworICAgIEp1bXAgZG9uZSA9IGp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKHRoaXMpOwor
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZWdUMCk7CisKKyAgICBkb25lLmxp
bmsodGhpcyk7CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworfQorCit2b2lkIEpJ
VDo6ZW1pdF9vcF9qc21hcF9oYXNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIEp1bXBMaXN0
IHN0cmFpZ2h0SGFzaDsKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7
CisgICAgSnVtcCBpc05vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKGJyYW5jaDgoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVk
SW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTU3RyaW5n
OjpvZmZzZXRPZlZhbHVlKCkpLCByZWdUMCk7CisgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDApKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgU3RyaW5nSW1w
bDo6ZmxhZ3NPZmZzZXQoKSksIHJlZ1QwKTsKKyAgICB1cnNoaWZ0MzIoVHJ1c3RlZEltbTMyKDYp
LCByZWdUMCk7CisgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCByZWdUMCkp
OworICAgIGF1dG8ganVtcFRvQm94aW5nID0ganVtcCgpOworCisgICAgaXNOb3RDZWxsLmxpbmso
dGhpcyk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChicmFuY2hJZk5vdE51bWJlcihyZWdUMCkp
OworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhyZWdU
MCkpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKKworICAgIHN0cmFpZ2h0SGFzaC5s
aW5rKHRoaXMpOworCisgICAganNNYXBIYXNoKHJlZ1QwLCByZWdUMSk7CisgICAganVtcFRvQm94
aW5nLmxpbmsodGhpcyk7CisgICAgYm94SW50MzIocmVnVDAsIEpTVmFsdWVSZWdzKHJlZ1QwKSk7
CisgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOworICAgIEp1bXAgZG9uZSA9IGp1bXAo
KTsKKworICAgIHNsb3dQYXRoLmxpbmsodGhpcyk7CisgICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQ
YXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF9qc21hcF9oYXNoKTsK
KyAgICBzbG93UGF0aENhbGwuY2FsbCgpOworICAgIGRvbmUubGluayh0aGlzKTsKK30KKwogdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7CiAgICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjA0
OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCw2ICsxNjAsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25z
KFZNJiB2bSkKICAgICBTVEFUSUNfQVNTRVJUKEZpbmFsT2JqZWN0VHlwZSA9PSAyMSk7CiAgICAg
U1RBVElDX0FTU0VSVChKU0Z1bmN0aW9uVHlwZSA9PSAyMyk7CiAgICAgU1RBVElDX0FTU0VSVChB
cnJheVR5cGUgPT0gMjkpOworICAgIFNUQVRJQ19BU1NFUlQoSlNNYXBUeXBlID09IDExNyk7CiAg
ICAgU1RBVElDX0FTU0VSVChJbnQ4QXJyYXlUeXBlID09IDEwMCk7CiAgICAgU1RBVElDX0FTU0VS
VChJbnQxNkFycmF5VHlwZSA9PSAxMDEpOwogICAgIFNUQVRJQ19BU1NFUlQoSW50MzJBcnJheVR5
cGUgPT0gMTAyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5MCw3ICsxNDkw
LDYgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYnVnKQogICAgIExMSU5UX0JF
R0lOKCk7CiAgICAgaW50IGRlYnVnSG9va0lEID0gcGNbMV0udS5vcGVyYW5kOwogICAgIHZtLmlu
dGVycHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29r
SUQpKTsKLSAgICAKICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlz
aW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk5LDIwICsxMTk5LDEwOCBAQCBfbGxp
bnRfb3BfaXNfc3RyaW5nOgogICAgIHN0b3JlcSBWYWx1ZUZhbHNlLCBbY2ZyLCB0MiwgOF0KICAg
ICBkaXNwYXRjaCgzKQogCi0KLV9sbGludF9vcF9pc19qc2FycmF5OgotICAgIHRyYWNlRXhlY3V0
aW9uKCkKK21hY3JvIGVtaXRJc0NlcnRhaW5KU1R5cGUodHlwZSkKICAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMiwgdDEpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQwKQotICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAub3BJ
c0pTQXJyYXlOb3RDZWxsCi0gICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEFycmF5VHlwZSwg
dDEKKyAgICBidHFueiB0MCwgdGFnTWFzaywgLmpzVHlwZU5vdENlbGwKKyAgICBjYmVxIEpTQ2Vs
bDo6bV90eXBlW3QwXSwgdHlwZSwgdDEKICAgICBvcnEgVmFsdWVGYWxzZSwgdDEKICAgICBzdG9y
ZXEgdDEsIFtjZnIsIHQyLCA4XQogICAgIGRpc3BhdGNoKDMpCi0ub3BJc0pTQXJyYXlOb3RDZWxs
OgorLmpzVHlwZU5vdENlbGw6CiAgICAgc3RvcmVxIFZhbHVlRmFsc2UsIFtjZnIsIHQyLCA4XQog
ICAgIGRpc3BhdGNoKDMpCitlbmQKKworX2xsaW50X29wX2lzX2pzYXJyYXk6CisgICAgdHJhY2VF
eGVjdXRpb24oKQorICAgIGVtaXRJc0NlcnRhaW5KU1R5cGUoQXJyYXlUeXBlKQorCisKK19sbGlu
dF9vcF9pc19qc21hcDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgZW1pdElzQ2VydGFpbkpT
VHlwZShKU01hcFR5cGUpCisKK19sbGludF9vcF9qc21hcF9oYXNoOgorICAgIHRyYWNlRXhlY3V0
aW9uKCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCisgICAgbG9hZENvbnN0YW50
T3JWYXJpYWJsZSh0MSwgdDApCisgICAgYnRxbnogdDAsIHRhZ01hc2ssIC5qc01hcEhhc2hOb3RD
ZWxsCisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBTdHJpbmdUeXBlLCAuc3RyYWlnaHRI
YXNoCisgICAgbG9hZHAgSlNTdHJpbmc6Om1fdmFsdWVbdDBdLCB0MAorICAgIGJ0cHogdDAsIC5z
bG93UGF0aAorICAgIGxvYWRpIFN0cmluZ0ltcGw6Om1faGFzaEFuZEZsYWdzW3QwXSwgdDAKKyAg
ICB1cnNoaWZ0aSA2LCB0MCAjIEZJWE1FIHN0YXRpYyBhc3NlcnQgNiBmb3Igc19mbGFnQ291bnQg
b2YgU3RyaW5nSW1wbCEKKyAgICBidGl6IHQwLCAuc2xvd1BhdGgKKyAgICBqbXAgLmJveFVwUmVz
dWx0CisgICAgIAorLnNsb3dQYXRoOgorICAgIGNhbGxPcGNvZGVTbG93UGF0aChfc2xvd19wYXRo
X2pzbWFwX2hhc2gpCisgICAgZGlzcGF0Y2goMykKKy5qc01hcEhhc2hOb3RDZWxsOgorICAgIGJx
YiB0MCwgdGFnVHlwZU51bWJlciwgLm9wMU5vdEludAorICAgIGptcCAuc3RyYWlnaHRIYXNoCisu
b3AxTm90SW50OgorICAgIGJ0cXogdDAsIHRhZ1R5cGVOdW1iZXIsIC5zdHJhaWdodEhhc2gKKyAg
ICAjIEZJWE1FIG1ha2UgZG91YmxlIGNhc2UgZmFzdAorICAgIGNhbGxPcGNvZGVTbG93UGF0aChf
c2xvd19wYXRoX2pzbWFwX2hhc2gpCisgICAgZGlzcGF0Y2goMykKKy5zdHJhaWdodEhhc2g6Cisg
ICAgbW92ZSB0MCwgdDEKKyMga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICBsc2hpZnRwIDMyLCB0
MQorICAgIG5vdHEgdDEKKyAgICBhZGRxIHQxLCB0MAorIyBrZXkgXj0gKGtleSA+PiAyMik7Cisg
ICAgbW92ZSB0MCwgdDEKKyAgICB1cnNoaWZ0cCAyMiwgdDEKKyAgICB4b3JxIHQxLCB0MAorIyBr
ZXkgKz0gfihrZXkgPDwgMTMpOworICAgIG1vdmUgdDAsIHQxCisgICAgbHNoaWZ0cCAxMywgdDEK
KyAgICBub3RxIHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChrZXkgPj4gOCk7CisgICAg
bW92ZSB0MCwgdDEKKyAgICB1cnNoaWZ0cCA4LCB0MQorICAgIHhvcnEgdDEsIHQwCisjIGtleSAr
PSAoa2V5IDw8IDMpOworICAgIG1vdmUgdDAsIHQxCisgICAgbHNoaWZ0cCAzLCB0MQorICAgIGFk
ZHEgdDEsIHQwCisjIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVy
c2hpZnRwIDE1LCB0MQorICAgIHhvcnEgdDEsIHQwCisjIGtleSArPSB+KGtleSA8PCAyNyk7Cisg
ICAgbW92ZSB0MCwgdDEKKyAgICBsc2hpZnRwIDI3LCB0MQorICAgIG5vdHEgdDEKKyAgICBhZGRx
IHQxLCB0MAorIyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZSB0MCwgdDEKKyAgICB1cnNo
aWZ0cCAzMSwgdDEKKyAgICB4b3JxIHQxLCB0MAorLmJveFVwUmVzdWx0OgorICAgIGFuZHEgNDI5
NDk2NzI5NSwgdDAgIyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIG9ycSB0YWdU
eXBlTnVtYmVyLCB0MAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKKyAgICBzdG9y
ZXEgdDAsIFtjZnIsIHQyLCA4XQorICAgIGRpc3BhdGNoKDMpCisKKworIyAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMiwgdDEpCisjICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKKyMg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDApCisjICAgIGJ0cW56IHQwLCB0YWdNYXNr
LCAub3BJc0pTQXJyYXlOb3RDZWxsCisjICAgIGNiZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBBcnJh
eVR5cGUsIHQxCisjICAgIG9ycSBWYWx1ZUZhbHNlLCB0MQorIyAgICBzdG9yZXEgdDEsIFtjZnIs
IHQyLCA4XQorIyAgICBkaXNwYXRjaCgzKQorIy5vcElzSlNBcnJheU5vdENlbGw6CisjICAgIHN0
b3JlcSBWYWx1ZUZhbHNlLCBbY2ZyLCB0MiwgOF0KKyMgICAgZGlzcGF0Y2goMykKIAogCiBfbGxp
bnRfb3BfaXNfb2JqZWN0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDcsNiArMzQ3LDcgQEAgY29uc3QgT2JqZWN0VHlwZSA9IDIwCiBjb25zdCBGaW5h
bE9iamVjdFR5cGUgPSAyMQogY29uc3QgSlNGdW5jdGlvblR5cGUgPSAyMwogY29uc3QgQXJyYXlU
eXBlID0gMjkKK2NvbnN0IEpTTWFwVHlwZSA9IDExNwogCiAjIFRoZSB0eXBlZCBhcnJheSB0eXBl
cyBuZWVkIHRvIGJlIG51bWJlcmVkIGluIGEgcGFydGljdWxhciBvcmRlciBiZWNhdXNlIG9mIHRo
ZSBtYW51YWxseSB3cml0dGVuCiAjIHN3aXRjaCBzdGF0ZW1lbnQgaW4gZ2V0X2J5X3ZhbCBhbmQg
cHV0X2J5X3ZhbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3Ry
dWN0aW9ucy5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS9pbnN0cnVjdGlvbnMucmIJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkod29ya2luZyBjb3B5KQpAQCAtNDEsNiAr
NDEsNyBAQCBNQUNST19JTlNUUlVDVElPTlMgPQogICAgICAibmVncCIsCiAgICAgICJuZWdxIiwK
ICAgICAgIm5vdGkiLAorICAgICAibm90cSIsCiAgICAgICJvcmkiLAogICAgICAicnNoaWZ0aSIs
CiAgICAgICJ1cnNoaWZ0aSIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS94ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20v
eDg2LnJiCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGlu
ZWFzbS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTkwMSw2ICs5MDEsOCBAQCBjbGFzcyBJbnN0
cnVjdGlvbgogICAgICAgICAgICAgJGFzbS5wdXRzICJuZWcje3g4NlN1ZmZpeCg6cXVhZCl9ICN7
eDg2T3BlcmFuZHMoOnF1YWQpfSIKICAgICAgICAgd2hlbiAibm90aSIKICAgICAgICAgICAgICRh
c20ucHV0cyAibm90I3t4ODZTdWZmaXgoOmludCl9ICN7eDg2T3BlcmFuZHMoOmludCl9IgorICAg
ICAgICB3aGVuICJub3RxIgorICAgICAgICAgICAgJGFzbS5wdXRzICJub3Qje3g4NlN1ZmZpeCg6
cXVhZCl9ICN7eDg2T3BlcmFuZHMoOnF1YWQpfSIKICAgICAgICAgd2hlbiAib3JpIgogICAgICAg
ICAgICAgaGFuZGxlWDg2T3AoIm9yI3t4ODZTdWZmaXgoOmludCl9IiwgOmludCkKICAgICAgICAg
d2hlbiAib3JwIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2
ICs0Niw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNs
dWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2lu
Y2x1ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKQEAgLTkzMyw0ICs5
MzQsMTEgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YWxfd2l0aAogICAgIEVO
RCgpOwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfanNtYXBfaGFzaCkKK3sKKyAgICBC
RUdJTigpOworICAgIEpTVmFsdWUgdmFsdWVUb0hhc2ggPSBPUF9DKDIpLmpzVmFsdWUoKTsKKyAg
ICBSRVRVUk4oSlNWYWx1ZShqc01hcEhhc2goZXhlYywgdmFsdWVUb0hhc2gpKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29t
bW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTgs
NiArMjU4LDcgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaQogU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfdmFsX3dpdGhfdGhpcyk7CiBTTE9X
X1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZF93aXRoX3RoaXMpOwogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmFsX3dpdGhfdGhpcyk7CitTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2pzbWFwX2hhc2gpOwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHJl
dmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNp
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIGVudW0gSlNfRVhQT1JUX1BSSVZB
VEUgSW50cmluc2ljIHsKICAgICBJc1JlZ0V4cE9iamVjdEludHJpbnNpYywKICAgICBJc1R5cGVk
QXJyYXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEludHJp
bnNpYywKKyAgICBKU01hcEdldEludHJpbnNpYywKKyAgICBKU01hcEhhc0ludHJpbnNpYywKIAog
ICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAgIFR5cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMs
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNSw3ICs3MjUsNiBAQCBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc1NldFByaXZhdGVO
YW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVG
dW5jSXNTZXQpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5TZXRJdGVy
YXRvclByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5n
KCksIHByaXZhdGVGdW5jU2V0SXRlcmF0b3IpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWls
dGluTmFtZXMoKS5zZXRJdGVyYXRvck5leHRQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVh
dGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4dCksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzTWFwUHJpdmF0ZU5hbWUoKSwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc01h
cCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJv
cGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzQXJyYXlQcml2YXRl
TmFtZSgpLCBhcnJheUNvbnN0cnVjdG9yLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmlzQXJyYXkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc0FycmF5
Q29uc3RydWN0b3JQcml2YXRlTmFtZSgpLCBwcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1Y3Rvciwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY29uY2F0TWVtY3B5UHJpdmF0
ZU5hbWUoKSwgcHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJ
KHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2lu
Y2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVl
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZUlubGluZXMuaCIKIApAQCAtMzcsNiArNDIsNDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNv
bnN0IENsYXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAordm9pZCBKU01hcDo6ZmluaXNoQ3JlYXRp
b24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQoreworICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKKworICAgIHN0YXRpY19hc3NlcnQoQkFTRV9WRUNUT1JfTEVOID09
IDQsICJhc3N1bWVkIGhlcmUgdG8gYmUgYSBwb3dlciBvZiAyIik7CisgICAgSlNBcnJheSogYXJy
YXkgPSBKU0FycmF5OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJ
bmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpLCBCQVNFX1ZF
Q1RPUl9MRU4pOworICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKKyAgICBSRUxFQVNFX0FTU0VS
VChhcnJheS0+bGVuZ3RoKCkgPT0gQkFTRV9WRUNUT1JfTEVOKTsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBCQVNFX1ZFQ1RPUl9MRU47IGkrKykKKyAgICAgICAgYXJyYXktPnB1dEJ5
SW5kZXhJbmxpbmUoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGksIGpzVW5kZWZpbmVkKCks
IGZhbHNlKTsKKworICAgIEpTT2JqZWN0KiBoZWFkID0gY29uc3RydWN0RW1wdHlPYmplY3QoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIEpTT2JqZWN0KiB0YWlsID0gY29uc3RydWN0
RW1wdHlPYmplY3QoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpOworICAgIGF1dG8gbWFrZVNo
YXBlID0gWyZdIChKU09iamVjdCogb2JqLCBKU1ZhbHVlIGxpc3ROZXh0LCBKU1ZhbHVlIGxpc3RQ
cmV2KSB7CisgICAgICAgIC8qCisgICAgICAgIGxpc3ROZXh0OiBtYXBUYWlsLAorICAgICAgICBs
aXN0UHJldjogbWFwVGFpbC5saXN0UHJldiwKKyAgICAgICAga2V5OiBrZXksCisgICAgICAgIHZh
bHVlOiB2YWx1ZSwKKyAgICAgICAgZGVsZXRlZDogZmFsc2UKKyAgICAgICAgKi8KKworICAgICAg
ICBvYmotPnB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsaXN0TmV4
dCIpLCBsaXN0TmV4dCwgMCk7CisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgImxpc3RQcmV2IiksIGxpc3RQcmV2LCAwKTsKKyAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAia2V5IiksIGpzTnVs
bCgpLCAwKTsKKyAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJp
bmcoJnZtLCAidmFsdWUiKSwganNOdWxsKCksIDApOworICAgICAgICBvYmotPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJkZWxldGVkIiksIGpzQm9vbGVhbih0cnVl
KSwgMCk7CisgICAgICAgIAorICAgIH07CisKKyAgICBtYWtlU2hhcGUoaGVhZCwgdGFpbCwganNO
dWxsKCkpOworICAgIG1ha2VTaGFwZSh0YWlsLCBqc051bGwoKSwgaGVhZCk7CisKKyAgICBwdXRE
aXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1hcEhlYWRQcml2YXRl
TmFtZSgpLCBoZWFkLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5tYXBUYWlsUHJpdmF0ZU5hbWUoKSwgdGFpbCwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFw
VGFibGVQcml2YXRlTmFtZSgpLCBhcnJheSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwU2l6ZVByaXZhdGVOYW1lKCksIGpz
TnVtYmVyKDApLCBEb250RW51bSk7Cit9CisKIHZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQogewogICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7CkBA
IC01Myw3ICs5OCwxNiBAQCBzaXplX3QgSlNNYXA6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxs
CiB2b2lkIEpTTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBq
c0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRv
cik7CisgICAgLy9qc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7CisKKyAgICBKU01hcCogdGhpc1ZhbHVlID0ganNDYXN0PEpTTWFwKj4o
Y2VsbCk7CisgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gdGhpc1ZhbHVlLT5tX21hcC5tX2hl
YWQtPm5leHQ7CisgICAgSGFzaE1hcEJ1Y2tldCogZW5kID0gdGhpc1ZhbHVlLT5tX21hcC5tX3Rh
aWw7CisgICAgd2hpbGUgKGJ1Y2tldCAhPSBlbmQpIHsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
JmJ1Y2tldC0+a2V5KTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1Y2tldC0+dmFsdWUpOwor
ICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQ7CisgICAgfQogfQogCiB2b2lkIEpTTWFwOjpj
b3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlU
b2tlbiB0b2tlbikKQEAgLTYyLDI3ICsxMTYsMjUgQEAgdm9pZCBKU01hcDo6Y29weUJhY2tpbmdT
dG9yZShKU0NlbGwqIGNlbAogICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEuY29w
eUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7CiB9CiAKLWJvb2wgSlNNYXA6OmhhcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorc2l6ZV90IEpTTWFwOjpzaXplKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKLSAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7CisgICAg
cmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4ZWMpOwogfQogCi1zaXplX3QgSlNNYXA6OnNpemUoRXhl
Y1N0YXRlKiBleGVjKQorLyoKK2Jvb2wgSlNNYXA6OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5KQogewotICAgIHJldHVybiBtX21hcERhdGEuc2l6ZShleGVjKTsKKyAgICByZXR1cm4g
bV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7CiB9CiAKIEpTVmFsdWUgSlNNYXA6OmdldChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogewotICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9t
YXBEYXRhLmdldChleGVjLCBrZXkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX21hcC5nZXQo
ZXhlYywga2V5KTsKIH0KIAogdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlzLCBr
ZXksIHZhbHVlKTsKKyAgICBtX21hcC5zZXQoZXhlYywgdGhpcywga2V5LCB2YWx1ZSk7CiB9CiAK
IHZvaWQgSlNNYXA6OmNsZWFyKEV4ZWNTdGF0ZSopCkBAIC05NCw1ICsxNDYsNiBAQCBib29sIEpT
TWFwOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiB7CiAgICAgcmV0dXJuIG1fbWFwRGF0
YS5yZW1vdmUoZXhlYywga2V5KTsKIH0KKyovCiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXAuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsMjU2IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCisvLyBsaXN0TmV4dDogbWFwVGFpbCwKKy8vIGxpc3RQcmV2OiBt
YXBUYWlsLmxpc3RQcmV2LAorLy8ga2V5OiBrZXksCisvLyB2YWx1ZTogdmFsdWUsCisvLyBkZWxl
dGVkOiBmYWxzZQorCitzdHJ1Y3QgSGFzaE1hcEJ1Y2tldCB7CisgICAgSGFzaE1hcEJ1Y2tldCog
bmV4dDsKKyAgICBIYXNoTWFwQnVja2V0KiBwcmV2OworICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBrZXk7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOworICAgIGJvb2wgZGVsZXRl
ZDsKK307CisKKy8vIEZJWE1FOiBtYWtlIHRoaXMgQUxXQVlTX0lOTElORSBpbnNpZGUgUHJvcGVy
dHlEZXNjcmlwdG9yCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIHNhbWVWYWx1ZU1hcChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIGlmIChhID09IGIpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghYS5pc051bWJlcigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7CisgICAgaWYgKCFiLmlzTnVtYmVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUgeCA9IGEuYXNOdW1iZXIoKTsK
KyAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKKyAgICBib29sIHhJc05hTiA9IHN0ZDo6aXNu
YW4oeCk7CisgICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkpOworICAgIGlmICh4SXNOYU4g
fHwgeUlzTmFOKQorICAgICAgICByZXR1cm4geElzTmFOICYmIHlJc05hTjsKKyAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHkpOwor
fQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKKyAgICAgICAgZG91
YmxlIGQgPSB2YWx1ZS5hc0RvdWJsZSgpOworICAgICAgICBpZiAoIXN0ZDo6aXNuYW4oZCkpIHsK
KyAgICAgICAgICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKKyAgICAgICAgICAgIGlm
IChpID09IGQpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBqc051bWJlcihpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICAvL3N0YXRpYyBk
b3VibGUgc2xvd0Nhc2VzID0gMC4wOworICAgICAgICAvL3N0YXRpYyBkb3VibGUgaGFzSGFzaCA9
IDAuMDsKKyAgICAgICAgLy9kYXRhTG9nKCJqc01hcEhhc2ggc2xvdyBwYXRoIHN0cmluZyFcbiIp
OworICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgICAgICBj
b25zdCBTdHJpbmcmIHd0ZlN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAg
ICAgICAgLy9zbG93Q2FzZXMrKzsKKyAgICAgICAgLy9pZiAod3RmU3RyaW5nLmltcGwoKS0+aGFz
SGFzaCgpKQorICAgICAgICAvLyAgICBoYXNIYXNoKys7CisgICAgICAgIC8vZGF0YUxvZygiUGVy
Y2VudCBoYXNoIiwgaGFzSGFzaC9zbG93Q2FzZXMsICJcbiIpOworICAgICAgICByZXR1cm4gd3Rm
U3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0KKyAgICB1aW50NjRfdCByYXdWYWx1ZSA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgcmV0dXJuIFdURjo6aW50SGFzaChyYXdWYWx1ZSk7
Cit9CisKKworY2xhc3MgSGFzaE1hcEltcGwgeworcHVibGljOgorICAgIEhhc2hNYXBJbXBsKCkK
KyAgICAgICAgOiBtX3NpemUoMCkKKyAgICAgICAgLCBtX2RlbGV0ZUNvdW50KDApCisgICAgICAg
ICwgbV9jYXBhY2l0eSg0KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxI
YXNoTWFwQnVja2V0Kio+KGZhc3RNYWxsb2MobV9jYXBhY2l0eSAqIHNpemVvZihIYXNoTWFwQnVj
a2V0KikpKTsKKyAgICAgICAgbWVtc2V0KG1fYnVmZmVyLCAtMSwgbV9jYXBhY2l0eSAqIHNpemVv
ZihIYXNoTWFwQnVja2V0KikpOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FwYWNpdHk7IGkrKykKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoaXNFbXB0eShtX2J1ZmZlcltpXSkpOworICAgICAgICB9CisKKyAg
ICAgICAgbV9oZWFkID0gc3RhdGljX2Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGZhc3RNYWxsb2Moc2l6
ZW9mKEhhc2hNYXBCdWNrZXQpKSk7CisgICAgICAgIG1fdGFpbCA9IHN0YXRpY19jYXN0PEhhc2hN
YXBCdWNrZXQqPihmYXN0TWFsbG9jKHNpemVvZihIYXNoTWFwQnVja2V0KSkpOworCisgICAgICAg
IG1faGVhZC0+cHJldiA9IG51bGxwdHI7CisgICAgICAgIG1faGVhZC0+bmV4dCA9IG1fdGFpbDsK
KyAgICAgICAgbV90YWlsLT5wcmV2ID0gbV9oZWFkOworICAgICAgICBtX3RhaWwtPm5leHQgPSBu
dWxscHRyOworCisgICAgICAgIG1faGVhZC0+ZGVsZXRlZCA9IHRydWU7CisgICAgICAgIG1fdGFp
bC0+ZGVsZXRlZCA9IHRydWU7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXQqIGVt
cHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVj
a2V0Kj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigtMSkpOworICAgIH0KKworICAgIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNFbXB0eShIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgewor
ICAgICAgICByZXR1cm4gYnVja2V0ID09IGVtcHR5VmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgSGFzaE1hcEJ1Y2tldCogZGVsZXRlZFZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTMpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRGVsZXRlZChIYXNoTWFw
QnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICByZXR1cm4gYnVja2V0ID09IGRlbGV0ZWRW
YWx1ZSgpOworICAgIH0KKworCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiogZmlu
ZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgY29u
c3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1aW50MzJfdCBpbmRl
eCA9IGpzTWFwSGFzaChleGVjLCBrZXkpICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCog
YnVja2V0ID0gbV9idWZmZXJbaW5kZXhdOworCisgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNr
ZXQpKSB7CisgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZChidWNrZXQpICYmIHNhbWVWYWx1ZU1h
cChleGVjLCBrZXksIGJ1Y2tldC0+a2V5LmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9idWZmZXIgKyBpbmRleDsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNr
OworICAgICAgICAgICAgYnVja2V0ID0gbV9idWZmZXJbaW5kZXhdOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIGlmIChIYXNo
TWFwQnVja2V0KiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpKQorICAgICAgICAgICAg
cmV0dXJuICgqYnVja2V0KS0+dmFsdWUuZ2V0KCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIWZpbmRCdWNrZXQoZXhlYywg
a2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEV4ZWNTdGF0ZSogZXhl
YywgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0g
bV9jYXBhY2l0eSAtIDE7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMs
IGtleSkgJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBtX2J1ZmZlcltp
bmRleF07CisgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpICYmICFpc0RlbGV0ZWQoYnVj
a2V0KSkgeworICAgICAgICAgICAgaWYgKHNhbWVWYWx1ZU1hcChleGVjLCBrZXksIGJ1Y2tldC0+
a2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGJ1Y2tldC0+dmFsdWUuc2V0KHZtLCBvd25l
ciwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgYnVja2V0ID0g
bV9idWZmZXJbaW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogbmV3
RW50cnkgPSBtX3RhaWw7CisgICAgICAgIG1fYnVmZmVyW2luZGV4XSA9IG5ld0VudHJ5OworICAg
ICAgICBuZXdFbnRyeS0+a2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgICAgIG5ld0VudHJ5
LT52YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAgICAgIG5ld0VudHJ5LT5kZWxldGVk
ID0gZmFsc2U7CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIG5ld1RhaWwgPSBzdGF0aWNfY2FzdDxI
YXNoTWFwQnVja2V0Kj4oZmFzdE1hbGxvYyhzaXplb2YoSGFzaE1hcEJ1Y2tldCkpKTsKKyAgICAg
ICAgbV90YWlsID0gbmV3VGFpbDsKKyAgICAgICAgbmV3VGFpbC0+bmV4dCA9IG51bGxwdHI7Cisg
ICAgICAgIG5ld1RhaWwtPnByZXYgPSBuZXdFbnRyeTsKKyAgICAgICAgbmV3VGFpbC0+ZGVsZXRl
ZCA9IHRydWU7CisgICAgICAgIG5ld0VudHJ5LT5uZXh0ID0gbmV3VGFpbDsKKyAgICAgICAgdWlu
dDMyX3QgbmV3U2l6ZSA9ICsrbV9zaXplOworICAgICAgICBpZiAoMipuZXdTaXplID4gbV9jYXBh
Y2l0eSkKKyAgICAgICAgICAgIHJlaGFzaChleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAg
ICAgICBIYXNoTWFwQnVja2V0KiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAg
ICAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAv
LyBGSVhNRTogc3RvcCBsZWFraW5nIG1lbW9yeSBoZXJlLCBhbmQgZmlndXJlIG91dCBpdGVyYXRv
cnMuCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGltcGwgPSAqYnVja2V0OworICAgICAgICBpbXBs
LT5uZXh0LT5wcmV2ID0gaW1wbC0+cHJldjsKKyAgICAgICAgaW1wbC0+cHJldi0+bmV4dCA9IGlt
cGwtPm5leHQ7CisgICAgICAgIGltcGwtPmRlbGV0ZWQgPSB0cnVlOworCisgICAgICAgICpidWNr
ZXQgPSBkZWxldGVkVmFsdWUoKTsKKworICAgICAgICBtX2RlbGV0ZUNvdW50Kys7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVj
KQorICAgIHsKKyAgICAgICAgbV9jYXBhY2l0eSA9IG1fY2FwYWNpdHkgKiAyOworICAgICAgICBm
YXN0RnJlZShtX2J1ZmZlcik7CisgICAgICAgIG1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8SGFzaE1h
cEJ1Y2tldCoqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldCop
KSk7CisgICAgICAgIG1lbXNldChtX2J1ZmZlciwgLTEsIG1fY2FwYWNpdHkgKiBzaXplb2YoSGFz
aE1hcEJ1Y2tldCopKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyBpKyspCisgICAgICAgICAg
ICAgICAgQVNTRVJUKGlzRW1wdHkobV9idWZmZXJbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBI
YXNoTWFwQnVja2V0KiBpdGVyID0gbV9oZWFkLT5uZXh0OworICAgICAgICBIYXNoTWFwQnVja2V0
KiBlbmQgPSBtX3RhaWw7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5
IC0gMTsKKyAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgICAgICB1aW50MzJf
dCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBpdGVyLT5rZXkuZ2V0KCkpICYgbWFzazsKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBt
X2J1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAg
ICAgICAgICAgICAgICAgIGJ1Y2tldCA9IG1fYnVmZmVyW2luZGV4XTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2J1ZmZlcltpbmRleF0gPSBpdGVyOwor
ICAgICAgICAgICAgaXRlciA9IGl0ZXItPm5leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHVpbnQzMl90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9zaXplID49IG1fZGVsZXRlQ291bnQpOworICAgICAgICByZXR1cm4gbV9zaXpl
IC0gbV9kZWxldGVDb3VudDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogaXRlciA9IG1faGVhZC0+bmV4dDsKKyAg
ICAgICAgSGFzaE1hcEJ1Y2tldCogZW5kID0gbV90YWlsOworICAgICAgICB3aGlsZSAoaXRlciAh
PSBlbmQpIHsKKyAgICAgICAgICAgIEhhc2hNYXBCdWNrZXQqIG5leHQgPSBpdGVyLT5uZXh0Owor
ICAgICAgICAgICAgZmFzdEZyZWUoaXRlcik7CisgICAgICAgICAgICBpdGVyID0gbmV4dDsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fc2l6ZSA9IDA7CisgICAgICAgIG1fY2FwYWNpdHkgPSA0Owor
ICAgICAgICBtX2RlbGV0ZUNvdW50ID0gMDsKKyAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOwor
ICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWNrZXQqKj4oZmFzdE1hbGxv
YyhtX2NhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXQqKSkpOworICAgICAgICBtZW1zZXQo
bV9idWZmZXIsIC0xLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXQqKSk7CisKKyAg
ICAgICAgbV9oZWFkLT5uZXh0ID0gbV90YWlsOworICAgICAgICBtX3RhaWwtPnByZXYgPSBtX2hl
YWQ7CisgICAgfQorCisvLyBGSVhNRTogbWFrZSBwcml2YXRlLgorcHVibGljOgorICAgIEhhc2hN
YXBCdWNrZXQqIG1faGVhZDsKKyAgICBIYXNoTWFwQnVja2V0KiBtX3RhaWw7CisgICAgSGFzaE1h
cEJ1Y2tldCoqIG1fYnVmZmVyOyAgICAKKyAgICB1aW50MzJfdCBtX3NpemU7CisgICAgdWludDMy
X3QgbV9kZWxldGVDb3VudDsKKyAgICB1aW50MzJfdCBtX2NhcGFjaXR5OworfTsKKwogY2xhc3Mg
SlNNYXBJdGVyYXRvcjsKIAogY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmpl
Y3QgewpAQCAtOTIsMjcgKzM0Miw0NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNNYXBUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0sIHN0
cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSk7
CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKwogICAgIHN0YXRp
YyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAg
fQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgc2l6ZV90IHNpemUo
RXhlY1N0YXRlKik7Ci0gICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXQoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFs
dWUgdmFsdWUpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKik7Ci0gICAgYm9vbCByZW1vdmUo
RXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLmdl
dChleGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC5oYXMo
ZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21h
cC5zZXQoZXhlYywgdGhpcywga2V5LCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgY2xlYXIoRXhl
Y1N0YXRlKikKKyAgICB7CisgICAgICAgIG1fbWFwLmNsZWFyKCk7CisgICAgfQorICAgIGJvb2wg
cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gbV9tYXAucmVtb3ZlKGV4ZWMsIGtleSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIEpTTWFw
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjYsNiArMzk1LDkgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CiAgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYs
IENvcHlUb2tlbik7CiAKKyAgICAvLyBGSVhNRTogZG9uJ3QgbWFrZSB0aGlzIHB1YmxpYy4KK3B1
YmxpYzoKKyAgICBIYXNoTWFwSW1wbCBtX21hcDsKICAgICBNYXBEYXRhIG1fbWFwRGF0YTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUg
IkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCisjaW5jbHVk
ZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgpAQCAtNDEsNiAr
NDQsMTAgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX21hcC5zZXQodm0sIHRoaXMsIGl0ZXJh
dGVkT2JqZWN0KTsKKyAgICBKU09iamVjdCogbGlzdEhlYWQgPSBqc0Nhc3Q8SlNPYmplY3QqPihp
dGVyYXRlZE9iamVjdC0+Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5tYXBIZWFkUHJpdmF0ZU5hbWUoKSkpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwQnVja2V0UHJpdmF0ZU5hbWUoKSwgbGlzdEhlYWQs
IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLm1hcEl0ZXJhdGlvbktpbmRQcml2YXRlTmFtZSgpLCBqc051bWJlcihzdGF0aWNfY2Fz
dDx1aW50MzJfdD4obV9raW5kKSksIERvbnRFbnVtKTsKKyAgICBtX2l0ZXIgPSBtX21hcC0+bV9t
YXAubV9oZWFkOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTMsMTYgKzUzLDE5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbmV4dChDYWxsRnJhbWUqIGNh
bGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6OktleVZhbHVlUGFp
cjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0b3IubmV4dChw
YWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbV9pdGVyLT5uZXh0OworICAg
ICAgICB3aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCkKKyAgICAgICAgICAgIGJ1Y2tl
dCA9IGJ1Y2tldC0+bmV4dDsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIG1faXRlciA9IGJ1Y2tldDsKIAogICAgICAgICBpZiAobV9raW5k
ID09IEl0ZXJhdGVWYWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci52YWx1ZTsKKyAgICAg
ICAgICAgIHZhbHVlID0gYnVja2V0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgZWxzZSBpZiAobV9r
aW5kID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAg
ICAgICAgdmFsdWUgPSBidWNrZXQtPmtleS5nZXQoKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxGcmFtZSwgcGFpci5rZXksIHBhaXIudmFsdWUpOwor
ICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxGcmFtZSwgYnVja2V0LT5rZXkuZ2V0
KCksIGJ1Y2tldC0+dmFsdWUuZ2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
QEAgLTk2LDE0ICs5OSwxNCBAQCBwcml2YXRlOgogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSkKICAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX21hcERhdGEuY3JlYXRl
SXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQotICAgIHsKLSAgICB9
CisgICAgeyB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNNYXAqKTsKICAgICBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsKKyAgICBIYXNoTWFwQnVj
a2V0KiBtX2l0ZXI7CiAgICAgSlNNYXA6Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9y
OwogICAgIEl0ZXJhdGlvbktpbmQgbV9raW5kOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsOSBAQCBl
bnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogICAgIE1vZHVsZUVudmlyb25tZW50VHlwZSwKICAgICBS
ZWdFeHBPYmplY3RUeXBlLAogICAgIFByb3h5T2JqZWN0VHlwZSwKKyAgICBKU01hcFR5cGUsCiAK
LSAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IFByb3h5T2JqZWN0VHlwZSwKKyAgICBMYXN0SlNDT2Jq
ZWN0VHlwZSA9IEpTTWFwVHlwZSwKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU1R5cGUp
ID09IHNpemVvZih1aW50OF90KSwgc2l6ZW9mX2pzdHlwZV9pc19vbmVfYnl0ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90
b3R5cGUuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICsz
MiwyNCBAQAogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJ
bmxpbmVzLmgiCiAKKyNpbmNsdWRlICJNYXBJdGVyYXRvclByb3RvdHlwZS5sdXQuaCIKKworLyog
U291cmNlIGZvciBNYXBJdGVyYXRvclByb3RvdHlwZS5sdXQuaAorQGJlZ2luIG1hcEl0ZXJhdG9y
UHJvdG90eXBlVGFibGUKK0BlbmQKKyovCisgIC8vbmV4dCAgICAgIEpTQnVpbHRpbiAgRG9udEVu
dW18RnVuY3Rpb24gMAorCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIE1hcEl0
ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJNYXAgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZv
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKE1hcEl0ZXJhdG9yUHJvdG90eXBlKSB9OworY29uc3Qg
Q2xhc3NJbmZvIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJNYXAgSXRlcmF0b3Ii
LCAmQmFzZTo6c19pbmZvLCAmbWFwSXRlcmF0b3JQcm90b3R5cGVUYWJsZSwgQ1JFQVRFX01FVEhP
RF9UQUJMRShNYXBJdGVyYXRvclByb3RvdHlwZSkgfTsKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChFeGVjU3RhdGUqKTsK
IAogdm9pZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmpl
Y3QpOworCiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0
cyhpbmZvKCkpKTsKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4
IEBAIGNsYXNzIE1hcEl0ZXJhdG9yUHJvdG90eXBlIDogcHVibGljIEpTTm8KIHB1YmxpYzoKICAg
ICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAorICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBTdHJ1Y3R1cmVGbGFncyA9IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKKwogICAgIHN0YXRpYyBNYXBJdGVyYXRvclByb3RvdHlwZSogY3JlYXRlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiAgICAgewogICAgICAgICBNYXBJdGVyYXRvclByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8TWFwSXRlcmF0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBNYXBJ
dGVyYXRvclByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDgsNiArNDgsOCBAQCBjb25zdCBDbGFzc0luZm8gTWFwUHJvdG90eXBlOjpzX2lu
Zm8gPSB7CiAvKiBTb3VyY2UgZm9yIE1hcFByb3RvdHlwZS5sdXQuaAogQGJlZ2luIG1hcFByb3Rv
dHlwZVRhYmxlCiAgIGZvckVhY2ggICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAg
aGFzICAgICAgIEpTQnVpbHRpbiAgRG9udEVudW18RnVuY3Rpb24gMQorICBsaXN0QXNBcnJheSAg
ICAgICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDAKIEBlbmQKICovCiAKQEAgLTcwLDE1
ICs3MiwxNiBAQCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAKICAg
ICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5jbGVhciwgbWFwUHJvdG9GdW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZF
X0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3
b3JkLCBtYXBQcm90b0Z1bmNEZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3Rv
RnVuY0dldCwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51
bSwgMSk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSwg
SlNNYXBHZXRJbnRyaW5zaWMpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywg
RG9udEVudW0sIDEsIEpTTWFwSGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIG1hcFByb3RvRnVuY1Nl
dCwgRG9udEVudW0sIDIpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCksIG1h
cFByb3RvRnVuY0tleXMsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQ
dWJsaWNOYW1lKCksIG1hcFByb3RvRnVuY1ZhbHVlcywgRG9udEVudW0sIDApOwogCi0gICAgLy8g
UHJpdmF0ZSBnZXQgLyBzZXQgb3BlcmF0aW9ucy4KLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2
YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZF
X0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5zZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKKyAg
ICAvL0pTRnVuY3Rpb24qIGdldEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1
bmN0aW9uKHZtLCBtYXBQcm90b3R5cGVHZXRDb2RlR2VuZXJhdG9yKHZtKSwgZ2xvYmFsT2JqZWN0
LCAiZ2V0Iik7CisgICAgLy9KU0Z1bmN0aW9uKiBzZXRGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNy
ZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgbWFwUHJvdG90eXBlU2V0Q29kZUdlbmVyYXRvcih2bSks
IGdsb2JhbE9iamVjdCwgInNldCIpOworICAgIC8vcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIGdl
dEZ1bmN0aW9uLCBEb250RW51bSk7CisgICAgLy9wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2
bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgc2V0
RnVuY3Rpb24sIERvbnRFbnVtKTsKIAogICAgIEpTRnVuY3Rpb24qIGVudHJpZXMgPSBKU0Z1bmN0
aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUoKS5zdHJpbmcoKSwgbWFwUHJvdG9GdW5jRW50cmll
cyk7CiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCksIGVudHJpZXMsIERvbnRFbnVtKTsK
QEAgLTkwLDE2ICs5MywxMyBAQCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtCiAKIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRNYXAoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0
KCkpIHsKKyAgICBpZiAoIXRoaXNWYWx1ZS5pc0NlbGwoKSkgewogICAgICAgICB0aHJvd1ZNRXJy
b3IoY2FsbEZyYW1lLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVl
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBKU01hcCogbWFwID0ganNE
eW5hbWljQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2Fs
bGVkIG9uIG5vbi1NYXAgb2JqZWN0IikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9
Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBpZiAodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0g
SlNNYXBUeXBlKQorICAgICAgICByZXR1cm4ganNDYXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKKyAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQ
cm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTE1MCw3ICsxNTAsMTIgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bgogICAgIEpTTWFwKiBtYXAg
PSBnZXRNYXAoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIW1h
cCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG1hcC0+c2l6ZShjYWxsRnJhbWUpKSk7Cisg
ICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOworICAgIEpTVmFsdWUgbWFwU2l6ZSA9IG1hcC0+
Z2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tYXBTaXplUHJp
dmF0ZU5hbWUoKSk7CisgICAgSlNWYWx1ZSBkZWxldGVDb3VudCA9IG1hcC0+Z2V0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tYXBEZWxldGVDb3VudFByaXZhdGVO
YW1lKCkpOworICAgIEFTU0VSVChtYXBTaXplLmFzVUludDMyKCkgPj0gZGVsZXRlQ291bnQuYXNV
SW50MzIoKSk7CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSBtYXBTaXplLmFzVUludDMyKCkg
LSBkZWxldGVDb3VudC5hc1VJbnQzMigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
dW1iZXIobnVtRWxlbWVudHMpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBt
YXBQcm90b0Z1bmNWYWx1ZXMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xNzcsMTEgKzE4Miw2
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW4KICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0ZShjYWxsRnJhbWUtPnZtKCksIGNh
bGxGcmFtZS0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgp
LCB0aGlzT2JqLCBJdGVyYXRlS2V5KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKSkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZh
dGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFt
aWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCShyZXZpc2lvbiAyMDQ5
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogfTsKIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0ZSopOwogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSopOwogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yTmV4dChFeGVjU3RhdGUq
KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>286953</attachid>
            <date>2016-08-25 02:37:11 -0700</date>
            <delta_ts>2016-08-25 19:18:21 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>105276</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDQ5
MjYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQCBKYXZh
U2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyBcCiAgICAgJChKYXZhU2Ny
aXB0Q29yZSkvYnVpbHRpbnMvSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgXAogICAgICQo
SmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzIFwKKyAgICAkKEph
dmFTY3JpcHRDb3JlKS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcyBcCiAgICAgJChK
YXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3Jp
cHRDb3JlKS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNj
cmlwdENvcmUpL2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpzIFwKQEAgLTE0Niw2ICsxNDcs
NyBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAg
SlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIFwKICAgICBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQu
aCBcCisgICAgTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmggXAogICAgIE1hcFByb3RvdHlwZS5s
dXQuaCBcCiAgICAgTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oIFwKICAgICBOdW1iZXJDb25z
dHJ1Y3Rvci5sdXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTgsNyArMTE5OCw3IEBA
CiAJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QzFENTkwMUYyMDA5OUEx
QjYgLyogV0FTTVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RjFENTkwMjgyMDA5OUExQjYgLyog
V0FTTUIzSVJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9y
LmNwcCAqLzsgfTsKIAkJNTNGNDBFOTExRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkwMUQ1OTAz
MDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi87IH07Ci0gICAgICAgICAgICAgICAgNTNGNDBFOTMx
RDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyog
V0FTTUIzSVJHZW5lcmF0b3IuaCAqLzsgfTsKKwkJNTNGNDBFOTMxRDVBNEFCMzAwOTlBMUI2IC8q
IFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3Iu
aCAqLzsgfTsKIAkJNTNGNDBFOTUxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRTk3
MUQ1QTdCRUMwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAv
KiBXQVNNTW9kdWxlUGFyc2VyLmNwcCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVE
IC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8q
IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzg2LDcgKzMzODYsNyBAQAogCQk1M0Y0
MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXQVNNUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNQjNJUkdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBX
QVNNT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01PcHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLSAgICAgICAgICAgICAgICA1M0Y0MEU5MjFENUE0QUIz
MDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01CM0lSR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9k
dWxlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Nb2R1bGVQ
YXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOTYxRDVBN0JFQzAw
OTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0FTTU1vZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNTIwLDYgKzM1MjAsNyBAQAogCQk3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
N0IyNUNCMkMzMDk0QTkyQTM4RTFEQjMgLyogSlNNb2R1bGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb2R1bGVMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzkwMTA3MzcxRDY2OTc0QzAwNTgwNDIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MDVCQjY2MUQxMjA1MEUwMDE5RkU1NyAvKiBJ
bmxpbmVBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5s
aW5lQWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkwNUJCNjcxRDEy
MDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmxpbmVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkx
NjBEQkIxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5UmV2b2tlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU1NTgsNyArNTU1OSw3IEBACiAJCQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlB
MUI2IC8qIFdBU01PcHMuaCAqLywKIAkJCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FT
TUZvcm1hdC5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdl
bmVyYXRvci5jcHAgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzRjQwRTky
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovLAorCQkJCTUzRjQwRTky
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovLAogCQkJCTUzRjQwRThB
MUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1M0Y0MEU5
NjFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8sCiAJCQkJNTNGNDBF
OTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywKQEAgLTcwMDQsNiAr
NzAwNSw3IEBACiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlz
ZUNvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFw
UHJvdG90eXBlLmpzICovLAorCQkJCTc5MDEwNzM3MUQ2Njk3NEMwMDU4MDQyMiAvKiBNYXBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmpzICovLAogCQkJCUE1MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAv
KiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQlBMTVERTVDNTFDMEZCRjhEMDA4OTEzM0Qg
LyogTnVtYmVyUHJvdG90eXBlLmpzICovLApAQCAtNzk0NSw3ICs3OTQ3LDcgQEAKIAkJCQkwRkI1
NDY3NzE0RjU5QjVDMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk5REEwMEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmggaW4g
SGVhZGVycyAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTNGNDBFOTMxRDVB
NEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNTJFMEUxNkZDRTEwMEIzNDQ2MCAvKiBMZXhlci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDRjNENTZCMUNEMjk0NzIwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFCRkJFNTYxMDAzOEJCQ0Eg
LyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHJldmlzaW9uIDIwNDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsOCArOTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhjYXBhYmls
aXRpZXMpIFwKICAgICBtYWNybyhzdGFyRGVmYXVsdCkgXAogICAgIG1hY3JvKEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbikgXAotICAgIG1hY3JvKGdldCkgXAotICAgIG1hY3JvKHNldCkgXAogICAg
IG1hY3JvKHNoaWZ0KSBcCiAgICAgbWFjcm8oYWxsb2NhdGVUeXBlZEFycmF5KSBcCiAgICAgbWFj
cm8oSW50OEFycmF5KSBcCkBAIC0xMzQsNyArMTMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
bWFjcm8ocHJlZGljdEZpbmFsTGVuZ3RoRnJvbUFyZ3VtdW50cykgXAogICAgIG1hY3JvKHByaW50
KSBcCiAgICAgbWFjcm8oaXNTZXQpIFwKLSAgICBtYWNybyhpc01hcCkgXAogICAgIG1hY3JvKHJl
Z0V4cENyZWF0ZSkgXAogICAgIG1hY3JvKFNldEl0ZXJhdG9yKSBcCiAgICAgbWFjcm8oc2V0SXRl
cmF0b3JOZXh0KSBcCkBAIC0xNTgsNyArMTU1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1h
Y3JvKHJlZ0V4cFRlc3RGYXN0KSBcCiAgICAgbWFjcm8oc3RyaW5nSW5jbHVkZXNJbnRlcm5hbCkg
XAogICAgIG1hY3JvKHN0cmluZ1NwbGl0RmFzdCkgXAotICAgIG1hY3JvKHN0cmluZ1N1YnN0cklu
dGVybmFsKQorICAgIG1hY3JvKHN0cmluZ1N1YnN0ckludGVybmFsKSBcCisgICAgbWFjcm8obWFw
SGVhZCkgXAorICAgIG1hY3JvKG1hcFRhaWwpIFwKKyAgICBtYWNybyhtYXBUYWJsZSkgXAorICAg
IG1hY3JvKG1hcEhhc2gpIFwKKyAgICBtYWNybyhtYXBTaXplKSBcCisgICAgbWFjcm8obWFwRGVs
ZXRlQ291bnQpIFwKKyAgICBtYWNybyhtYXBCdWNrZXQpIFwKKyAgICBtYWNybyhtYXBJdGVyYXRp
b25LaW5kKSBcCiAKIAogI2RlZmluZSBJTklUSUFMSVpFX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZ
KG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjUHJpdmF0ZU5hbWUuaW1w
bCgpLCAmbV8jI25hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01h
cEl0ZXJhdG9yUHJvdG90eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworZnVuY3Rpb24gbmV4dCgpCit7CisgICAgbGV0IGxhc3RNYXBCdWNrZXQg
PSB0aGlzLkBtYXBCdWNrZXQ7CisgICAgaWYgKCFsYXN0TWFwQnVja2V0KQorICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9u
LU1hcEl0ZXJhdG9yIG9iamVjdCIpOworCisgICAgbGV0IGxpc3ROZXh0ID0gbGFzdE1hcEJ1Y2tl
dC5saXN0TmV4dDsKKyAgICB3aGlsZSAobGlzdE5leHQgJiYgbGlzdE5leHQuZGVsZXRlZCkKKyAg
ICAgICAgbGlzdE5leHQgPSBsaXN0TmV4dC5saXN0TmV4dDsKKworICAgIGlmIChsaXN0TmV4dCkg
eworICAgICAgICB0aGlzLkBtYXBCdWNrZXQgPSBsaXN0TmV4dDsKKyAgICAgICAgaWYgKHRoaXMu
QG1hcEl0ZXJhdGlvbktpbmQgPT09IEBpdGVyYXRpb25LaW5kS2V5VmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4ge2RvbmU6IGZhbHNlLCB2YWx1ZTogW2xpc3ROZXh0LmtleSwgbGlzdE5leHQudmFs
dWVdfTsKKyAgICAgICAgaWYgKHRoaXMuQG1hcEl0ZXJhdGlvbktpbmQgPT09IEBpdGVyYXRpb25L
aW5kS2V5KQorICAgICAgICAgICAgcmV0dXJuIHtkb25lOiBmYWxzZSwgdmFsdWU6IGxpc3ROZXh0
LmtleX07CisgICAgICAgIC8vIFZhbHVlCisgICAgICAgIHJldHVybiB7ZG9uZTogZmFsc2UsIHZh
bHVlOiBsaXN0TmV4dC52YWx1ZX07CisgICAgfQorICAgIHJldHVybiB7ZG9uZTogdHJ1ZX07Cit9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBQcm90b3R5cGUu
anMJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9N
YXBQcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDE2IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw3ICsyOCw3IEBAIGZ1bmN0aW9uIGZv
ckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8KIHsKICAgICAidXNlIHN0cmljdCI7CiAKLSAg
ICBpZiAoIUBpc01hcCh0aGlzKSkKKyAgICBpZiAoIUBpc0pTTWFwKHRoaXMpKQogICAgICAgICB0
aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmpl
Y3QiKTsKIAogICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpCkBAIC00NCwz
ICs0NSwyMDAgQEAgZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLwogICAg
ICAgICBjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCB2YWx1ZVsxXSwgdmFsdWVbMF0sIHRoaXMpOwog
ICAgIH0KIH0KKworZnVuY3Rpb24gZ2V0KGtleSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAg
ICBpZiAoIUBpc0pTTWFwKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFw
IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKKworICAgIGxldCB0YWJsZSA9
IHRoaXMuQG1hcFRhYmxlOworICAgIGxldCB0YWJsZUxlbiA9IHRhYmxlLmxlbmd0aDsgCisgICAg
bGV0IG1hc2sgPSB0YWJsZUxlbiAtIDE7CisgICAgbGV0IGhhc2ggPSBAanNNYXBIYXNoKGtleSkg
JiBtYXNrOworICAgIGxldCBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAvL2xldCBhZGRlciA9
IDE7CisgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICBsZXQgYnVja2V0S2V5ID0gYnVja2V0
LmtleTsKKyAgICAgICAgaWYgKChidWNrZXRLZXkgPT09IGtleSB8fCAoYnVja2V0S2V5ICE9PSBi
dWNrZXRLZXkgJiYga2V5ICE9PSBrZXkpKSAmJiAhYnVja2V0LmRlbGV0ZWQpCisgICAgICAgICAg
ICByZXR1cm4gYnVja2V0LnZhbHVlOworICAgICAgICBoYXNoID0gKGhhc2ggKyAxKSAmIG1hc2s7
CisgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsKKyAgICAgICAgYnVj
a2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgIC8vYWRkZXIrKzsKKyAgICB9CisgICAgcmV0dXJu
IEB1bmRlZmluZWQ7Cit9CisKK2Z1bmN0aW9uIGhhcyhrZXkpCit7CisgICAgInVzZSBzdHJpY3Qi
OworCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJy
b3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQg
dGFibGUgPSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4gPSB0YWJsZS5sZW5ndGg7
IAorICAgIGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAgIGxldCBoYXNoID0gQGpzTWFwSGFz
aChrZXkpICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgLy9sZXQg
YWRkZXIgPSAxOworICAgIHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgbGV0IGJ1Y2tldEtleSA9
IGJ1Y2tldC5rZXk7CisgICAgICAgIGlmICgoYnVja2V0S2V5ID09PSBrZXkgfHwgKGJ1Y2tldEtl
eSAhPT0gYnVja2V0S2V5ICYmIGtleSAhPT0ga2V5KSkgJiYgIWJ1Y2tldC5kZWxldGVkKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIp
ICYgbWFzazsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAgICBidWNr
ZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisrOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZShrZXkpCit7CisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
Ik1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQgdGFi
bGUgPSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4gPSB0YWJsZS5sZW5ndGg7IAor
ICAgIGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChr
ZXkpICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgLy9sZXQgYWRk
ZXIgPSAxOworICAgIHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgbGV0IGJ1Y2tldEtleSA9IGJ1
Y2tldC5rZXk7CisgICAgICAgIGlmICgoYnVja2V0LmtleSA9PT0ga2V5IHx8IChidWNrZXRLZXkg
IT09IGJ1Y2tldEtleSAmJiBrZXkgIT09IGtleSkgJiYgIWJ1Y2tldC5kZWxldGVkKSB7CisgICAg
ICAgICAgICBidWNrZXQuZGVsZXRlZCA9IHRydWU7CisgICAgICAgICAgICBidWNrZXQubGlzdE5l
eHQubGlzdFByZXYgPSBidWNrZXQubGlzdFByZXY7CisgICAgICAgICAgICBidWNrZXQubGlzdFBy
ZXYubGlzdE5leHQgPSBidWNrZXQubGlzdE5leHQ7CisgICAgICAgICAgICArK3RoaXMuQG1hcERl
bGV0ZUNvdW50OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAg
Ly9oYXNoID0gKGhhc2ggKyBhZGRlcioqMikgJiBtYXNrOworICAgICAgICBoYXNoID0gKGhhc2gg
KyAxKSAmIG1hc2s7CisgICAgICAgIGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2Fk
ZGVyKys7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKKworfQorCitAZ2xvYmFsUHJpdmF0ZQor
ZnVuY3Rpb24ganNNYXBSZWhhc2gobWFwLCBvbGRMZW4pCit7CisgICAgdGhpcy5AbWFwU2l6ZSA9
IHRoaXMuQG1hcFNpemUgLSB0aGlzLkBtYXBEZWxldGVDb3VudDsKKyAgICB0aGlzLkBtYXBEZWxl
dGVDb3VudCA9IDA7CisgICAgbGV0IG5ld1NpemUgPSBvbGRMZW4gKiAyOworICAgIGxldCB0YWJs
ZSA9IG5ldyBAQXJyYXkobmV3U2l6ZSk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZS5s
ZW5ndGg7IGkrKykKKyAgICAgICAgdGFibGVbaV0gPSBAdW5kZWZpbmVkOworICAgIG1hcC5AbWFw
VGFibGUgPSB0YWJsZTsKKyAgICBsZXQgbWFzayA9IG5ld1NpemUgLSAxOworICAgIGxldCBub2Rl
ID0gbWFwLkBtYXBIZWFkLmxpc3ROZXh0OworICAgIGxldCBuZXh0Tm9kZSA9IG5vZGUubGlzdE5l
eHQ7CisgICAgd2hpbGUgKG5leHROb2RlKSB7CisgICAgICAgIGxldCBrZXkgPSBub2RlLmtleTsK
KyAgICAgICAgbGV0IGhhc2ggPSBAanNNYXBIYXNoKGtleSkgJiBtYXNrOworICAgICAgICBsZXQg
YnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgIC8vbGV0IGFkZGVyID0gMTsKKyAgICAgICAg
d2hpbGUgKGJ1Y2tldCkgeworICAgICAgICAgICAgLy9oYXNoID0gKGhhc2ggKyBhZGRlcioqMikg
JiBtYXNrOworICAgICAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAgICAg
ICAgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgICAgICAvL2FkZGVyKys7CisgICAgICAg
IH0KKworICAgICAgICB0YWJsZVtoYXNoXSA9IG5vZGU7CisgICAgICAgIG5vZGUgPSBuZXh0Tm9k
ZTsKKyAgICAgICAgbmV4dE5vZGUgPSBuZXh0Tm9kZS5saXN0TmV4dDsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIHNldChrZXksIHZhbHVlKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICgh
QGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3BlcmF0
aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHRhYmxlID0gdGhpcy5A
bWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3RoOyAKKyAgICBsZXQgbWFz
ayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhhc2goa2V5KSAmIG1hc2s7
CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0IGFkZGVyID0gMTsKKyAg
ICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGxldCBidWNrZXRLZXkgPSBidWNrZXQua2V5Owor
ICAgICAgICBpZiAoYnVja2V0LmtleSA9PT0ga2V5IHx8IChidWNrZXRLZXkgIT09IGJ1Y2tldEtl
eSAmJiBrZXkgIT09IGtleSkpIHsKKyAgICAgICAgICAgIGJ1Y2tldC52YWx1ZSA9IHZhbHVlOwor
ICAgICAgICAgICAgYnVja2V0LmRlbGV0ZWQgPSBmYWxzZTsgLy8gTWF5YmUgd2Ugd2VyZSBkZWxl
dGVkIGJlZm9yZSwgYnV0IHdlIGFyZSBub3QgYW55bW9yZS4KKyAgICAgICAgICAgICsrdGhpcy5A
bWFwU2l6ZTsKKyAgICAgICAgICAgIC0tdGhpcy5AbWFwRGVsZXRlQ291bnQ7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy9oYXNoID0gKGhhc2ggKyBhZGRlcioqMikg
JiBtYXNrOworICAgICAgICBoYXNoID0gKGhhc2ggKyAxKSAmIG1hc2s7CisgICAgICAgIGJ1Y2tl
dCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2FkZGVyKys7CisgICAgfQorCisgICAgbGV0IG1h
cFRhaWwgPSB0aGlzLkBtYXBUYWlsOworICAgIGxldCBuZXdJdGVtID0geworICAgICAgICBsaXN0
TmV4dDogbWFwVGFpbCwKKyAgICAgICAgbGlzdFByZXY6IG1hcFRhaWwubGlzdFByZXYsCisgICAg
ICAgIGtleToga2V5LAorICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgIGRlbGV0ZWQ6IGZh
bHNlCisgICAgfTsKKyAgICBtYXBUYWlsLmxpc3RQcmV2ID0gbmV3SXRlbTsKKyAgICBuZXdJdGVt
Lmxpc3RQcmV2Lmxpc3ROZXh0ID0gbmV3SXRlbTsKKworICAgIHRhYmxlW2hhc2hdID0gbmV3SXRl
bTsKKworICAgIGxldCBuZXdTaXplID0gKyt0aGlzLkBtYXBTaXplOworICAgIGlmICgyICogbmV3
U2l6ZSA+IHRhYmxlTGVuKSB7IC8vIERvIGludCBtdWxzIGFuZCBjb21wYXJlLiBUaGlzIGlzIGp1
c3QgY2hlY2tpbmcgaWYgd2UncmUgZmlsbGVkIHVwIG1vcmUgdGhhbiAxLzIuCisgICAgICAgIEBq
c01hcFJlaGFzaCh0aGlzLCB0YWJsZUxlbik7CisgICAgfSAKK30KKworZnVuY3Rpb24gY2xlYXIo
a2V5LCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc0pTTWFwKHRo
aXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQg
b24gbm9uLU1hcCBvYmplY3QiKTsKKworICAgIHRoaXMuQG1hcFRhYmxlID0gQG5ld0FycmF5V2l0
aFNpemUoNCk7CisgICAgdGhpcy5AbWFwVGFpbC5saXN0UHJldiA9IHRoaXMuQG1hcEhlYWQ7Cisg
ICAgdGhpcy5AbWFwSGVhZC5saXN0TmV4dCA9IHRoaXMuQG1hcFRhaWw7CisgICAgdGhpcy5AbWFw
U2l6ZSA9IDA7CisgICAgdGhpcy5AbWFwRGVsZXRlQ291bnQgPSAwOworfQorCitmdW5jdGlvbiBs
aXN0QXNBcnJheSgpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0
aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVk
IG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQgcmVzdWx0ID0gW107CisKKyAgICBsZXQg
YnVja2V0ID0gdGhpcy5AbWFwSGVhZDsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIHJl
c3VsdC5wdXNoKHsKKyAgICAgICAgICAgIGtleTogYnVja2V0LmtleSB8fCAiRU1QVFkiLAorICAg
ICAgICAgICAgdmFsdWU6IGJ1Y2tldC52YWx1ZSB8fCAiRU1QVFkiCisgICAgICAgIH0pOworICAg
ICAgICBidWNrZXQgPSBidWNrZXQubGlzdE5leHQ7CisgICAgfQorICAgIHJldHVybiB7CisgICAg
ICAgIHRhYmxlTGVuZ3RoOiB0aGlzLkBtYXBUYWJsZS5sZW5ndGgsCisgICAgICAgIG1hcFNpemU6
IHRoaXMuQG1hcFNpemUsCisgICAgICAgIGFycmF5OiByZXN1bHQKKyAgICB9OworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnku
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJ
bnRyaW5zaWNSZWdpc3RyeS5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OSw2ICs0OSw4IEBAIGNsYXNzIElkZW50aWZpZXI7CiAgICAgbWFjcm8odG9OdW1iZXIp
IFwKICAgICBtYWNybyh0b1N0cmluZykgXAogICAgIG1hY3JvKG5ld0FycmF5V2l0aFNpemUpIFwK
KyAgICBtYWNybyhqc01hcEhhc2gpIFwKKyAgICBtYWNybyhpc0pTTWFwKSBcCiAKICNkZWZpbmUg
SlNDX0NPTU1PTl9CWVRFQ09ERV9JTlRSSU5TSUNfQ09OU1RBTlRTX0VBQ0hfTkFNRShtYWNybykg
XAogICAgIG1hY3JvKHVuZGVmaW5lZCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMjA0OTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw2ICs1Nyw3IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19udW1i
ZXIiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX3N0cmlu
ZyIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfanNhcnJh
eSIsICJsZW5ndGgiIDogMyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfanNtYXAi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX29iamVjdCIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfb2JqZWN0X29y
X251bGwiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2Z1
bmN0aW9uIiwgImxlbmd0aCIgOiAzIH0sCkBAIC0xNDcsNyArMTQ4LDggQEAKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX3Jlc3VtZSIsICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3Bfd2F0Y2hkb2ciLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSIsICJsZW5ndGgiIDogMn0sCi0g
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCIsICJsZW5n
dGgiIDogM30KKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2xvZ19zaGFkb3dfY2hpY2tlbl90
YWlsIiwgImxlbmd0aCIgOiAzfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2pzbWFwX2hh
c2giLCAibGVuZ3RoIiA6IDMgfQogICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNp
b24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNl
RGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsNyBAQCB2b2lkIGNvbXB1dGVVc2Vz
Rm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9p
c19zdHJpbmc6CiAgICAgY2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6
CiAgICAgY2FzZSBvcF9pc19vYmplY3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoK
ICAgICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAtMTkwLDYgKzE5MSw3IEBAIHZvaWQgY29tcHV0
ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CiAg
ICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9y
ZXN0OgorICAgIGNhc2Ugb3BfanNtYXBfaGFzaDoKICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3Vt
ZW50czogewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsKICAg
ICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKTsKQEAgLTQxOSw2ICs0MjEsNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBv
cF9pc19zdHJpbmc6CiAgICAgY2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNt
YXA6CiAgICAgY2FzZSBvcF9pc19vYmplY3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVs
bDoKICAgICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAtNDY0LDYgKzQ2Nyw3IEBAIHZvaWQgY29t
cHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3Vuc2lnbmVkOgog
ICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiAKICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0
OgorICAgIGNhc2Ugb3BfanNtYXBfaGFzaDoKICAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDog
ewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAxKTsKICAgICAgICAg
ZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTExOSw2ICsxMTE5LDE0IEBA
IHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBwcmludFVuYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19qc2FycmF5Iik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX2pzbWFwOiB7CisgICAgICAgICAgICBw
cmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19qc21hcCIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qc21hcF9oYXNoOiB7Cisg
ICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqc21hcF9o
YXNoIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2lz
X29iamVjdDogewogICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24s
IGl0LCAiaXNfb2JqZWN0Iik7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJ
KHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjMwLDYgKzYzMCw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRleFN0cmluZyhSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGluZGV4KTsKIAogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0SXNKU0FycmF5KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBl
bWl0VW5hcnlPcChvcF9pc19qc2FycmF5LCBkc3QsIHNyYyk7IH0KKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdElzSlNNYXAoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJu
IGVtaXRVbmFyeU9wKG9wX2lzX2pzbWFwLCBkc3QsIHNyYyk7IH0KKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdEpTTWFwSGFzaChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1
cm4gZW1pdFVuYXJ5T3Aob3BfanNtYXBfaGFzaCwgZHN0LCBzcmMpOyB9CiAgICAgICAgIFJlZ2lz
dGVySUQqIGVtaXRJc09iamVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lz
dGVySUQqIHNyYyk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0VtcHR5KFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTY0LDYgKzk2NCwyNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUludHJp
bnNpY05vZGU6OmVtaXRfCiAgICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb24uZ2V0KCk7CiB9CiAK
K1JlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfanNNYXBI
YXNoKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgSlNDOjpSZWdpc3RlcklEKiBk
c3QpCit7CisgICAgQXJndW1lbnRMaXN0Tm9kZSogbm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZTsK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2l6ZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsK
KyAgICBBU1NFUlQoIW5vZGUtPm1fbmV4dCk7CisKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmlu
YWxEZXN0aW5hdGlvbiA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRKU01hcEhhc2goZmluYWxEZXN0aW5hdGlvbi5nZXQoKSwgc2l6ZS5nZXQoKSk7
CisgICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb24uZ2V0KCk7Cit9CisKK1JlZ2lzdGVySUQqIEJ5
dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF9pbnRyaW5zaWNfaXNKU01hcChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIEpTQzo6UmVnaXN0ZXJJRCogZHN0KQoreworICAgIEFyZ3Vt
ZW50TGlzdE5vZGUqIG5vZGUgPSBtX2FyZ3MtPm1fbGlzdE5vZGU7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNpemUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7CisgICAgQVNTRVJUKCFub2Rl
LT5tX25leHQpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdGluYXRpb24gPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgIGdlbmVyYXRvci5lbWl0SXNKU01h
cChmaW5hbERlc3RpbmF0aW9uLmdldCgpLCBzaXplLmdldCgpKTsKKyAgICByZXR1cm4gZmluYWxE
ZXN0aW5hdGlvbi5nZXQoKTsKK30KIAogI2RlZmluZSBKU0NfREVDTEFSRV9CWVRFQ09ERV9JTlRS
SU5TSUNfQ09OU1RBTlRfR0VORVJBVE9SUyhuYW1lKSBcCiAgICAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY18jI25hbWUoQnl0ZWNvZGVHZW5lcmF0b3Im
IGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShy
ZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMzIsNiArMTAzMiwxOCBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAorICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAgY2FzZSBKU01hcEhhc2g6
CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5v
ZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXNOb25FbXB0eUpT
TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNKU0FycmF5
OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0xMDQyLDYgKzEwNTQsNyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBJc09iamVjdE9yTnVsbDoK
ICAgICBjYXNlIElzRnVuY3Rpb246CiAgICAgY2FzZSBJc1JlZ0V4cE9iamVjdDoKKyAgICBjYXNl
IElzSlNNYXA6CiAgICAgY2FzZSBJc1R5cGVkQXJyYXlWaWV3OiB7CiAgICAgICAgIEFic3RyYWN0
VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKGNoaWxk
LnZhbHVlKCkpIHsKQEAgLTEwNTAsNiArMTA2Myw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52YWx1ZSgpLmlzT2JqZWN0
KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09IEFycmF5VHlwZSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJc0pTTWFwOgorICAgICAg
ICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52YWx1ZSgpLmlzT2Jq
ZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09IEpTTWFwVHlwZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoK
ICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkLnZhbHVlKCkuaXNDZWxsKCkKQEAgLTEyOTEsNiArMTMwNyw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAgICAgICAgIGJy
ZWFrOworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTM3LDYgKzI1MzcsNDMgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbAogICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgZ2V0KG9wZXJhbmQpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzogeworICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwID0g
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAg
ICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rl
ck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChKU01hcEhhc2gsIGtl
eSk7CisgICAgICAgIE5vZGUqIGxvYWRlZEJ1Y2tldEluZGV4ID0gYWRkVG9HcmFwaChHZXRKU01h
cEJ1Y2tldCwgbWFwLCBrZXksIGhhc2gpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dy
YXBoKExvYWRGcm9tSlNNYXBCdWNrZXQsIG1hcCwgbG9hZGVkQnVja2V0SW5kZXgpOworICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgICAgICAvL2RhdGFMb2coIk1hcCBnZXQgaW50cmlzbmljXG4iKTsK
KyAgICAgICAgLy9tYWNybyhHZXRKU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAg
ICAgIC8vbWFjcm8oTG9hZEZyb21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgICAg
IC8vbWFjcm8oSXNOb25FbXB0eUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorCisg
ICAgICAgIC8vR2V0SlNNYXBCdWNrZXQKKyAgICAgICAgLy9Mb2FkRnJvbUpTTWFwQnVja2V0Cisg
ICAgICAgIC8vSXNOb25FbXB0eUpTTWFwQnVja2V0CisgICAgfQorCisgICAgY2FzZSBKU01hcEhh
c0ludHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0g
MikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisK
KyAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJl
Z2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRk
VG9HcmFwaChKU01hcEhhc2gsIGtleSk7CisgICAgICAgIE5vZGUqIGxvYWRlZEJ1Y2tldEluZGV4
ID0gYWRkVG9HcmFwaChHZXRKU01hcEJ1Y2tldCwgbWFwLCBrZXksIGhhc2gpOworICAgICAgICBO
b2RlKiByZXN1bHQgPSBhZGRUb0dyYXBoKElzTm9uRW1wdHlKU01hcEJ1Y2tldCwgbG9hZGVkQnVj
a2V0SW5kZXgpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBy
ZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgICAgIAogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5NDgsNiArMzk4NSwxOCBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09E
RShvcF9pc19qc2FycmF5KTsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ugb3BfaXNfanNtYXA6
IHsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKElzSlNNYXAs
IHZhbHVlKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19qc21hcCk7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIG9wX2pzbWFwX2hhc2g6IHsKKyAgICAgICAgICAgIE5vZGUqIHZh
bHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTTWFwSGFzaCwgdmFsdWUpKTsKKyAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2pzbWFwX2hhc2gpOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBv
cF9pc19vYmplY3Q6IHsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dy
YXBoKElzT2JqZWN0LCB2YWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIs
NiArMTQyLDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAg
IGNhc2Ugb3BfaXNfbnVtYmVyOgogICAgIGNhc2Ugb3BfaXNfc3RyaW5nOgogICAgIGNhc2Ugb3Bf
aXNfanNhcnJheToKKyAgICBjYXNlIG9wX2lzX2pzbWFwOgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0
OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6CiAgICAgY2FzZSBvcF9pc19mdW5jdGlv
bjoKQEAgLTI0NSw2ICsyNDYsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9w
Y29kZUlECiAgICAgY2FzZSBvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbDoKICAgICBjYXNlIG9w
X3B1dF90b19zY29wZToKICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6CisgICAgY2FzZSBvcF9q
c21hcF9oYXNoOgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsKIAogICAgIGNh
c2Ugb3BfbmV3X3JlZ2V4cDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcml6ZS5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYyLDYgKzE2Miw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKICAgICBjYXNlIENvbXBhcmVFcVB0cjoKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBj
YXNlIElzSlNNYXA6CiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAg
ICAgY2FzZSBJc0Jvb2xlYW46CkBAIC0xOTgsNiArMTk5LDI4IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAKKyAg
ICBjYXNlIEpTTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEdldEpTTWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0Zp
ZWxkcyk7CisgICAgICAgIEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAg
RWRnZSYga2V5RWRnZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEpTTWFwQnVja2V0SW5kZXhMb2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGtleUVkZ2UpLCBMYXp5
Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIG1h
cEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSYgYnVja2V0SW5kZXhFZGdlID0g
bm9kZS0+Y2hpbGQyKCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSlNNYXBHZXRMb2MsIE1p
c2NGaWVsZHMsIG1hcEVkZ2UsIGJ1Y2tldEluZGV4RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKKyAg
ICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEhh
c0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAg
ICAgIHJldHVybjsKKwogICAgIGNhc2UgQml0QW5kOgogICAgIGNhc2UgQml0T3I6CiAgICAgY2Fz
ZSBCaXRYb3I6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShy
ZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYg
Z3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFu
Y2VPZkN1c3RvbToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CiAgICAg
Y2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46
CkBAIC0xODUsNiArMTg2LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoK
ICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICBj
YXNlIEdldEpTTWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICBj
YXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNp
b24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU0MCw2ICsxNTQwLDI3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgSXNKU01hcDogeworICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVDZWxsKCkpCisgICAgICAg
ICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAgICAg
ICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVk
Z2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxJbnQz
MlVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2Fz
ZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1
Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZl
IHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8g
YWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoK
QEAgLTE2MTEsNiArMTYzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxXaXRo
VGhpczoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIENvbXBh
cmVFcVB0cjoKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Myw2ICsxNDMsMTUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IExvYwogICAgIGNhc2UgUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jOgogICAgICAgICBvdXQucHJp
bnQoIlJlZ0V4cE9iamVjdExhc3RJbmRleExvYyIpOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU01hcEJ1Y2tldEluZGV4TG9jOgorICAgICAgICBvdXQucHJpbnQoIkpTTWFwQnVja2V0SW5k
ZXhMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAg
IG91dC5wcmludCgiSlNNYXBHZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNN
YXBIYXNMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNNYXBIYXNMb2MiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lv
biAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCwxMCBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAg
ICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFN0YWNr
TG9jLAotICAgIFN0YWNrUGF5bG9hZExvYworICAgIFN0YWNrUGF5bG9hZExvYywKKyAgICBKU01h
cEJ1Y2tldEluZGV4TG9jLAorICAgIEpTTWFwR2V0TG9jLAorICAgIEpTTWFwSGFzTG9jCiB9Owog
CiBjbGFzcyBIZWFwTG9jYXRpb24gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNiArMzA5LDcgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEluc3RhbmNlT2ZDdXN0b20sIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKICAgICBtYWNybyhJ
c0pTQXJyYXksIE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8oSXNKU01hcCwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc0VtcHR5LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAog
ICAgIG1hY3JvKElzVW5kZWZpbmVkLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElz
Qm9vbGVhbiwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKQEAgLTM4OCw3ICszODksMTIgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRv
ciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpCisg
ICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAgLyogSGFzaGluZyBm
b3IgSlNNYXAgKi8gXAorICAgIG1hY3JvKEpTTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCisg
ICAgbWFjcm8oR2V0SlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKExv
YWRGcm9tSlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKElzTm9uRW1wdHlK
U01hcEJ1Y2tldCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRl
cyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBh
bmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMg
YWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAs
NiArNTAsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVu
dmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMu
aCIKQEAgLTE3NjcsNiArMTc2OCwyNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
RHluYW1pY1ZhCiAgICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywgaWRl
bnQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIHNsb3QpOwogfQogCitpbnQzMl90IEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uSlNNYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUg
aW5wdXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUo
anNNYXBIYXNoKGV4ZWMsIEpTVmFsdWU6OmRlY29kZShpbnB1dCkpKTsKKyAgICBpZiAodm0uZXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiByZXN1bHQuYXNJbnQzMigp
OworfQorCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0SW5k
ZXgoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5KQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIHJldHVybiBqc0Nhc3Q8SlNNYXAqPihtYXApLT5tX21hcC5maW5k
QnVja2V0SW5kZXgoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSkpOworfQorCiBleHRlcm4gIkMi
IHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVm
ZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28g
d291bGRuJ3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw5IEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQz
Ml90KTsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwSGFzaChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCk7CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSlNNYXBGaW5kQnVja2V0SW5kZXgoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFs
dWUpOworCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NDQsNiArNzQ0LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICAgICAg
c2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBC
dWNrZXQ6CisgICAgICAgICAgICAvLyBGSVhNRTogdXNlIHRoZSBjYWxscyB2YWx1ZSBwcm9maWxl
ciBoZXJlLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQnl0ZWNvZGVUb3ApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgorICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsK
KwogICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6IHsKICAgICAgICAgICAgIHNldFByZWRpY3Rp
b24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc4Nyw2ICs4MDEsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIGNhc2UgSW5zdGFu
Y2VPZkN1c3RvbToKICAgICAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgICAgIGNhc2UgSXNKU01h
cDoKICAgICAgICAgY2FzZSBJc0VtcHR5OgogICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAg
ICAgICBjYXNlIElzQm9vbGVhbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1
OCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNl
IEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgogICAgIGNhc2UgSXNKU0Fy
cmF5OgorICAgIGNhc2UgSXNKU01hcDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1Vu
ZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTM1NSw2ICszNTYsMTAgQEAgYm9vbCBz
YWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0RHluYW1pY1Zh
cjoKICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6CisgICAg
Y2FzZSBKU01hcEhhc2g6CisgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRG
cm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6CiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
MjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNMZXhp
Y2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvcGVy
dHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1
ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCkBAIC00Nyw2ICs0OCw4IEBACiAjaW5jbHVkZSAiVHlw
ZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKIAorI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAK
ICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtNDY1MSw2ICs0NjU0LDEyNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgSXNKU01hcDogeworICAgICAgICBjb21waWxlSXNKU01hcChub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBKU01hcEhhc2g6IHsKKyAgICAgICAgY29tcGlsZUpT
TWFwSGFzaChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0SlNNYXBC
dWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNoaWxkMigp
KTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+Y2hpbGQz
KCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgbWFzayh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IGluZGV4KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgYnVmZmVyKHRoaXMpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgYnVja2V0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBoYXNoR1BS
ID0gaGFzaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIG1hc2tHUFIgPSBtYXNrLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIg
PSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJ1ZmZlckdQUiA9IGJ1ZmZlci5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGtleUdQUiA9IGtleS5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobWFwR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNNYXAsIG1fbWFw
KSArIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbCwgbV9idWZmZXIpKSwgYnVmZmVyR1BSKTsK
KyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1hcEdQUiwgT0JK
RUNUX09GRlNFVE9GKEpTTWFwLCBtX21hcCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGws
IG1fY2FwYWNpdHkpKSwgbWFza0dQUik7CisgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0z
MigxKSwgbWFza0dQUik7CisgICAgICAgIG1faml0Lm1vdmUoaGFzaEdQUiwgaW5kZXhHUFIpOwor
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aENhc2VzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QgbG9vcEFyb3VuZDsKKworICAgICAgICBtX2ppdC5hbmQzMihtYXNrR1BSLCBpbmRleEdQ
Uik7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChidWZm
ZXJHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIGJ1Y2tldEdQUik7
CisgICAgICAgIGF1dG8gbm90UHJlc2VudEluVGFibGUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihI
YXNoTWFwSW1wbDo6ZW1wdHlWYWx1ZSgpKSk7CisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgYnVja2V0
R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsOjpkZWxldGVkVmFsdWUoKSkpKTsKKworICAg
ICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBPQkpF
Q1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwga2V5KSksIGJ1Y2tldEdQUik7CisKKyAgICAgICAg
Ly8gUGVyZm9ybSBPYmplY3QuaXMoKQorICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2g2
NChNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIGJ1Y2tldEdQUiwga2V5R1BSKSk7IC8vIFRoZXkncmUg
ZGVmaW5pdGVseSB0aGUgc2FtZSB2YWx1ZSwgd2UgZm91bmQgdGhlIGJ1Y2tldCB3ZSB3ZXJlIGxv
b2tpbmcgZm9yIQorICAgICAgICBhdXRvIG9uZUlzbnRDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RD
ZWxsKEpTVmFsdWVSZWdzKGJ1Y2tldEdQUikpOworICAgICAgICAvLyBmaXJzdCBpcyBhIGNlbGwg
aGVyZS4KKyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpT
VmFsdWVSZWdzKGtleUdQUikpKTsKKyAgICAgICAgLy8gQm90aCBhcmUgY2VsbHMgaGVyZS4KKyAg
ICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6Tm90RXF1
YWwsCisgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEpTQ2VsbDo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAg
ICAgLy8gVGhlIGZpcnN0IGlzIGEgc3RyaW5nIGhlcmUuCisgICAgICAgIHNsb3dQYXRoQ2FzZXMu
YXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgSklU
Q29tcGlsZXI6OkFkZHJlc3Moa2V5R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwg
VHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0
cmluZywgYnV0IHRoZSBzZWNvbmQgaXMgbm90LCB3ZSBjb250aW51ZSB0byBsb29wIGFyb3VuZC4K
KyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBvbmVJ
c250Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZG9uZSBhIDY0
LWJpdCBjb21wYXJlIGF0IHRoaXMgcG9pbnQsIHNvIGlmIG9uZSBpcyBub3QgYSBudW1iZXIsIHRo
ZXkncmUgZGVmaW5pdGVseSBub3QgZXF1YWwuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90TnVtYmVyKGJ1Y2tldEdQUikpOworICAgICAgICBsb29wQXJvdW5kLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihrZXlHUFIpKTsKKyAgICAgICAgLy8gQm90aCBh
cmUgZGVmaW5pdGVseSBudW1iZXJzLiBJZiB3ZSBzZWUgYSBkb3VibGUsIHdlIGdvIHRvIHRoZSBz
bG93IHBhdGguCisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90
SW50MzIoYnVja2V0R1BSKSk7CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJy
YW5jaElmTm90SW50MzIoa2V5R1BSKSk7CisgICAgICAgIAorICAgICAgICBsb29wQXJvdW5kLmxp
bmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQ
Uik7CisgICAgICAgIG1faml0Lmp1bXAoKS5saW5rVG8obG9vcCwgJm1faml0KTsKKworICAgICAg
ICBzbG93UGF0aENhc2VzLmxpbmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdp
c3RlcnMoaW5kZXhHUFIpOworICAgICAgICAvLyBGSVhNRTogd2UndmUgYWxyZWFkeSBoYXNoZWQs
IGxldHMganVzdCBwYXNzIGluIGFsbCB0aGUgc3RhdGUgdG8gdGhlIGZpbmRCdWNrZXQgZnVuY3Rp
b24uCisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0SW5kZXgs
IGluZGV4R1BSLCBtYXBHUFIsIGtleUdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3Rl
cnMoaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgICAgICBk
b25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG5vdFByZXNlbnRJblRhYmxlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoVUlOVF9NQVgpLCBp
bmRleEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBpbnQzMlJlc3Vs
dChpbmRleEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBtYXAodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgYnVja2V0
SW5kZXgodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBidWNrZXRJbmRleEdQUiA9IGJ1Y2tldEluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gbm90QnVja2V0ID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRJbmRleEdQUiwgVHJ1c3Rl
ZEltbTMyKFVJTlRfTUFYKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobWFwR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNNYXAsIG1fbWFwKSArIE9CSkVDVF9P
RkZTRVRPRihIYXNoTWFwSW1wbCwgbV9idWZmZXIpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHJlc3VsdEdQUiwgYnVja2V0SW5k
ZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgcmVzdWx0R1BSKTsKKyAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09G
RlNFVE9GKEhhc2hNYXBCdWNrZXQsIHZhbHVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8g
ZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RCdWNrZXQubGluaygmbV9qaXQpOwor
ICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6
ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6IHsKKyAgICAg
ICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGJ1Y2tldEluZGV4KHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcg
YnVja2V0SW5kZXhHUFIgPSBidWNrZXRJbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJlMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRJbmRleEdQUiwgVHJ1c3RlZEltbTMyKFVJTlRfTUFYKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBJc09i
amVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxMyw2ICszNjEzLDk1IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTQXJyYXkoTm8KICAgICBibGVzc2VkQm9vbGVhblJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
SXNKU01hcChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IElzSlNNYXAp
OworICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CisKKyAgICAgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTTWFwVHlwZSksCisgICAgICAgICAg
ICByZXN1bHRHUFIpOworICAgICAgICBibGVzc0Jvb2xlYW4ocmVzdWx0R1BSKTsKKyAgICAgICAg
Ymxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBV
bnR5cGVkVXNlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgSlNWYWx1
ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0g
bV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncyk7CisKKyAgICBtX2ppdC5jb21wYXJlOChK
SVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlUmVn
cy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICBU
cnVzdGVkSW1tMzIoSlNNYXBUeXBlKSwKKyAgICAgICAgcmVzdWx0R1BSKTsKKyAgICBibGVzc0Jv
b2xlYW4ocmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVt
cCgpOworCisgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBtb3ZlRmFsc2VUbyhyZXN1
bHRHUFIpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgYmxlc3NlZEJvb2xlYW5SZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUpT
TWFwSGFzaChOb2RlKiBub2RlKQoreworICAgIC8vIEZJWE1FOiB3ZSBhcmUgY3VycmVudGx5IHNs
b3dlciBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHRvIGNhbGwgaW50byBDIHRvIGhhc2ggdGhl
IHN0cmluZy4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBhIHN0cmluZyBhcmd1bWVudCBmYXN0IHBh
dGggdGhhdCBhdm9pZHMgY2hlY2tzIQorCisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSlNNYXBI
YXNoKTsKKworICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOworCisgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc3RyYWlnaHRIYXNoOworICAgIGF1dG8g
aXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2pp
dC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIo
U3RyaW5nVHlwZSkpKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGlucHV0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
cmVzdWx0R1BSKSk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJl
c3VsdEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgbV9q
aXQudXJzaGlmdDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIHJlc3VsdEdQUik7
CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0R1BSKSk7CisgICAgYXV0byBkb25lMiA9IG1faml0Lmp1bXAoKTsKKworICAg
IGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5i
cmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUikpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9q
aXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhpbnB1dEdQUikpKTsKKyAgICBzbG93UGF0aC5h
cHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgIHN0cmFpZ2h0SGFzaC5saW5rKCZtX2ppdCk7Cisg
ICAgbV9qaXQubW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5qc01hcEhhc2go
cmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAg
ICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwSGFzaCwgcmVzdWx0R1BS
LCBpbnB1dEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAg
IG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBkb25lMi5saW5rKCZtX2ppdCk7CisgICAg
ZG9uZS5saW5rKCZtX2ppdCk7CisgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30K
Kwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqIG5vZGUp
CiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2
aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NTYsNiArNzU2LDggQEAgcHVibGljOgogICAgIHZv
aWQgY29tcGlsZUluc3RhbmNlT2ZDdXN0b20oTm9kZSopOwogCiAgICAgdm9pZCBjb21waWxlSXNK
U0FycmF5KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVJc0pTTWFwKE5vZGUqKTsKKyAgICB2b2lk
IGNvbXBpbGVKU01hcEhhc2goTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzUmVnRXhwT2JqZWN0
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc1R5cGVkQXJyYXlWaWV3KE5vZGUqKTsKIApAQCAt
MTE5Nyw2ICsxMTk5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChv
cGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oWl9KSVRPcGVyYXRpb25fRUNKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJl
c3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwg
Y2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FQ0laQyBvcGVyYXRpb24sIEdQUlJlZyByZWdP
cDEsIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVudE9wMiwgaW50MzJfdCBvcDMsIEdQUlJlZyByZWdP
cDQpCiAgICAgewpAQCAtMTY3MSw2ICsxNjc4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0VKWlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0
ZWRJbW0zMihhcmczKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNp
bmNsdWRlICJGVExBYnN0cmFjdEhlYXAuaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNp
bmNsdWRlICJKU01hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAg
LTEwMiw3ICsxMDMsMTEgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1h
Y3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwK
ICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVj
dE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3Byb3RvdHlwZSwgU3RydWN0dXJlOjpw
cm90b3R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3Ry
dWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQorICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1
cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNNYXBf
SGFzaE1hcEltcGxfYnVmZmVyLCBPQkpFQ1RfT0ZGU0VUT0YoSlNNYXAsIG1fbWFwKSArIE9CSkVD
VF9PRkZTRVRPRihIYXNoTWFwSW1wbCwgbV9idWZmZXIpKSBcCisgICAgbWFjcm8oSlNNYXBfSGFz
aE1hcEltcGxfY2FwYWNpdHksIE9CSkVDVF9PRkZTRVRPRihKU01hcCwgbV9tYXApICsgT0JKRUNU
X09GRlNFVE9GKEhhc2hNYXBJbXBsLCBtX2NhcGFjaXR5KSkgXAorICAgIG1hY3JvKEhhc2hNYXBC
dWNrZXRfdmFsdWUsIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCB2YWx1ZSkpIFwKKyAg
ICBtYWNybyhIYXNoTWFwQnVja2V0X2tleSwgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBCdWNrZXQs
IGtleSkpCiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBc
CiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3Rv
cmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDQ5MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4MCw2ICsxODAsMTEgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5D
b21waWxlKE5vZGUqIAogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICBjYXNlIFVu
cmVhY2hhYmxlOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01hcDoKKyAgICBj
YXNlIEpTTWFwSGFzaDoKKyAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZy
b21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKICAgICBjYXNl
IElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJl
dmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNM
ZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk9wZXJh
bmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNj
b3BlZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDIxIEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgpOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAgICAgICAgIGNvbXBp
bGVJc0pTTWFwKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6
CisgICAgICAgICAgICBjb21waWxlSlNNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRKU01hcEJ1
Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1
Y2tldDoKKyAgICAgICAgICAgIGNvbXBpbGVMb2FkRnJvbUpTTWFwQnVja2V0KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6CisgICAgICAg
ICAgICBjb21waWxlSXNOb25FbXB0eUpTTWFwQnVja2V0KCk7CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgICAgIGNvbXBpbGVJc09iamVjdCgpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC02MzAxLDYgKzYzMTcsMjUxIEBAIHByaXZhdGU6CiAgICAg
ICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVzdWx0
KSk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlSlNNYXBIYXNoKCkKKyAgICB7CisgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAg
TEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBz
bG93Q2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN0cmFpZ2h0
SGFzaCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzTnVtYmVyQ2Fz
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vbkVtcHR5U3RyaW5nQ2Fz
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2Vs
bENhc2UpLCB1bnN1cmUobm90Q2VsbCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0
ID0gbV9vdXQuYXBwZW5kVG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZh
bHVlIGlzU3RyaW5nID0gbV9vdXQuZXF1YWwobV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1f
aGVhcHMuSlNDZWxsX3R5cGVJbmZvVHlwZSksIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nVHlwZSkp
OworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc1N0cmluZywgdW5zdXJlKGlz
U3RyaW5nQ2FzZSksIHVuc3VyZShzdHJhaWdodEhhc2gpKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhpc1N0cmluZ0Nhc2UsIG5vbkVtcHR5U3RyaW5nQ2FzZSk7CisgICAgICAgIExWYWx1ZSBz
dHJpbmdJbXBsID0gbV9vdXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cmluZ0lt
cGwsIG1fb3V0LmNvbnN0SW50UHRyKDApKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShub25F
bXB0eVN0cmluZ0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub25FbXB0eVN0cmlu
Z0Nhc2UsIG5vdENlbGwpOworICAgICAgICBMVmFsdWUgaGFzaCA9IG1fb3V0LmxTaHIobV9vdXQu
bG9hZDMyKHN0cmluZ0ltcGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLCBtX291
dC5jb25zdEludDMyKDYpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9uRW1wdHlTdHJpbmdI
YXNoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhhc2gpOworICAgICAgICBtX291dC5icmFuY2gobV9v
dXQuZXF1YWwoaGFzaCwgbV9vdXQuY29uc3RJbnQzMigwKSksCisgICAgICAgICAgICByYXJlbHko
c2xvd0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdENlbGwsIGlzTnVtYmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgIGlzTnVtYmVyKHZhbHVlKSwgdW5zdXJlKGlzTnVtYmVyQ2FzZSksIHVuc3VyZShzdHJh
aWdodEhhc2gpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpc051bWJlckNhc2UsIHN0cmFp
Z2h0SGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzSW50MzIodmFs
dWUpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSwgdW5zdXJlKHNsb3dDYXNlKSk7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc3RyYWlnaHRIYXNoLCBzbG93Q2FzZSk7CisgICAgICAgIC8vIGtleSAr
PSB+KGtleSA8PCAzMik7CisgICAgICAgIExWYWx1ZSBrZXkgPSB2YWx1ZTsKKyAgICAgICAgTFZh
bHVlIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQuY29u
c3RJbnQzMigzMikpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRlbXApOworICAgICAg
ICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4g
MjIpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1w
LCBtX291dC5jb25zdEludDMyKDIyKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXks
IHRlbXApOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgICAgICB0ZW1wID0g
a2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTMp
KTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9v
dXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgICAg
ICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25z
dEludDMyKDgpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAg
ICAgIC8vIGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0
ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMykpOworICAgICAgICBrZXkg
PSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4gMTUpOwor
ICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291
dC5jb25zdEludDMyKDE1KSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXAp
OworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgICAgICB0ZW1wID0ga2V5Owor
ICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjcpKTsKKyAg
ICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRk
KGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICAgICAgdGVt
cCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQz
MigzMSkpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAg
a2V5ID0gbV9vdXQuY2FzdFRvSW50MzIoa2V5KTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBm
YXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGtleSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9u
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAg
ICAgICAgICAgIHZtQ2FsbChJbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwSGFz
aCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Cisg
ICAgICAgIHNldEludDMyKG1fb3V0LnBoaShJbnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCwg
bm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0
SlNNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcEFyb3VuZCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90UHJlc2VudEluVGFibGUgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RFbXB0eVZhbHVlID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RGVsZXRlZFZhbHVlID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Qml0RXF1YWwgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlOb3RDZWxsID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNDZWxsID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgYm90aEFyZUNlbGxzID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNTdHJpbmcgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc051bWJlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVOdW1iZXJzID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNJbnQzMiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisK
KyAgICAgICAgTFZhbHVlIG1hcCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IExWYWx1ZSBrZXkgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFs
dWUgaGFzaCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIExWYWx1ZSBi
dWZmZXIgPSBtX291dC5sb2FkUHRyKG1hcCwgbV9oZWFwcy5KU01hcF9IYXNoTWFwSW1wbF9idWZm
ZXIpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIobWFwLCBt
X2hlYXBzLkpTTWFwX0hhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJPbmUpOworCisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaGFzaCk7Cisg
ICAgICAgIG1fb3V0Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAg
IExWYWx1ZSB1bm1hc2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAg
ICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOwor
ICAgICAgICBWYWx1ZUZyb21CbG9jayBpbmRleFJlc3VsdCA9IG1fb3V0LmFuY2hvcihpbmRleCk7
CisgICAgICAgIExWYWx1ZSBoYXNoTWFwQnVja2V0ID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJ
bmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgYnVmZmVyLCBtX291dC56ZXJv
RXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsOjpl
bXB0eVZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShub3RQcmVzZW50SW5UYWJsZSksIHVu
c3VyZShub3RFbXB0eVZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RW1wdHlW
YWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFs
KGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsOjpkZWxldGVkVmFs
dWUoKSkpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUobm90RGVsZXRl
ZFZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RGVsZXRlZFZhbHVlLCBub3RC
aXRFcXVhbCk7CisgICAgICAgIExWYWx1ZSBidWNrZXRLZXkgPSBtX291dC5sb2FkNjQoaGFzaE1h
cEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0X2tleSk7CisgICAgICAgIC8vIFBlcmZvcm0g
T2JqZWN0LmlzKCkKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGtleSwgYnVja2V0
S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90Qml0RXF1
YWwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RCaXRFcXVhbCwgYnVja2V0S2V5SXND
ZWxsKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChidWNrZXRLZXkpLAorICAgICAgICAg
ICAgdW5zdXJlKGJ1Y2tldEtleUlzQ2VsbCksIHVuc3VyZShidWNrZXRLZXlOb3RDZWxsKSk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNDZWxsLCBib3RoQXJlQ2VsbHMpOwor
ICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGtleSksCisgICAgICAgICAgICB1bnN1cmUoYm90
aEFyZUNlbGxzKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhib3RoQXJlQ2VsbHMsIGJ1Y2tldEtleUlzU3RyaW5nKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KGlzU3RyaW5nKGJ1Y2tldEtleSksCisgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNTdHJp
bmcpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tl
dEtleUlzU3RyaW5nLCBidWNrZXRLZXlOb3RDZWxsKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlz
U3RyaW5nKGtleSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFy
b3VuZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleU5vdENlbGwsIGJ1Y2tl
dEtleUlzTnVtYmVyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TnVtYmVyKGJ1Y2tldEtl
eSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShidWNrZXRLZXlJc051
bWJlcikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzTnVtYmVyLCBib3Ro
QXJlTnVtYmVycyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihrZXkpLAorICAg
ICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUoYm90aEFyZU51bWJlcnMpKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhib3RoQXJlTnVtYmVycywgYnVja2V0S2V5SXNJbnQzMik7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGJ1Y2tldEtleSksCisgICAgICAgICAg
ICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUoYnVja2V0S2V5SXNJbnQzMikpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzSW50MzIsIGxvb3BBcm91bmQpOworICAgICAgICBt
X291dC5icmFuY2goaXNOb3RJbnQzMihrZXkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRo
KSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhsb29wQXJv
dW5kLCBzbG93UGF0aCk7CisgICAgICAgIG1fb3V0LmFkZEluY29taW5nVG9QaGkodW5tYXNrZWRJ
bmRleCwgbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9vdXQuaW50MzJPbmUpKSk7Cisg
ICAgICAgIG1fb3V0Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhz
bG93UGF0aCwgbm90UHJlc2VudEluVGFibGUpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25KU01hcEZpbmRCdWNrZXRJbmRleCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm90UHJlc2VudEluVGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG5vdFByZXNlbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQzMihVSU5U
X01BWCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1f
b3V0LnBoaShJbnQzMiwgaW5kZXhSZXN1bHQsIHNsb3dQYXRoUmVzdWx0LCBub3RQcmVzZW50UmVz
dWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgpCisg
ICAgeworICAgICAgICBMVmFsdWUgbWFwID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKKyAg
ICAgICAgTFZhbHVlIGJ1Y2tldEluZGV4ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaGFzQnVja2V0ID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBub0J1Y2tldFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25z
dEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKSkpOworCisgICAgICAgIG1fb3V0
LmJyYW5jaChtX291dC5lcXVhbChidWNrZXRJbmRleCwgbV9vdXQuY29uc3RJbnQzMihVSU5UX01B
WCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNrZXQp
KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0J1
Y2tldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHN0b3JhZ2UgPSBtX291dC5sb2Fk
UHRyKG1hcCwgbV9oZWFwcy5KU01hcF9IYXNoTWFwSW1wbF9idWZmZXIpOworICAgICAgICBMVmFs
dWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHQoYnVja2V0SW5k
ZXgsIEludDY0KSwgU2NhbGVFaWdodCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBidWNrZXRS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubG9hZDY0KGhhc2hNYXBCdWNrZXQsIG1faGVhcHMu
SGFzaE1hcEJ1Y2tldF92YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVz
dWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eUpTTWFwQnVja2V0KCkK
KyAgICB7CisgICAgICAgIExWYWx1ZSBidWNrZXRJbmRleCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0SW5k
ZXgsIG1fb3V0LmNvbnN0SW50MzIoVUlOVF9NQVgpKTsKKyAgICAgICAgc2V0Qm9vbGVhbihyZXN1
bHQpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUlzSlNNYXAoKQorICAgIHsKKyAgICAgICAg
aWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBz
ZXRCb29sZWFuKG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4
dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAg
IG1fb3V0LmNvbnN0SW50MzIoSlNNYXBUeXBlKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9u
b2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0
LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1
cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
ZXF1YWwoCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5K
U0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNNYXBU
eXBlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVzdWx0KSk7CisgICAgfQorCiAg
ICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1
MCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0p
OwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6anNNYXBIYXNoKEdQUlJlZyBpbnB1dEFuZFJl
c3VsdCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgR1BSUmVnIGlucHV0ID0gaW5wdXRBbmRSZXN1
bHQ7CisgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNo
KTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChz
Y3JhdGNoKTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkg
Pj4gMjIpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMjIpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8g
a2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMTMpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsKKyAg
ICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAg
bW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMig4KSwgc2Ny
YXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSAoa2V5IDw8
IDMpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigzKSwgc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBe
PSAoa2V5ID4+IDE1KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDE1KSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOwor
ICAgIC8vIGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7Cisg
ICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDI3KSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRj
aCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDMx
KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMy
KDMxKSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworCisgICAgLy8gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkKKyAgICB2b2lkKiBtYXNrID0gYml0d2lzZV9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFVJTlRfTUFYKSk7CisgICAgYW5kNjQoVHJ1
c3RlZEltbVB0cihtYXNrKSwgaW5wdXRBbmRSZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDggQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lIHx8IEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG1f
YmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgICAgICB9CiAgICAgfQorCisgICAg
dm9pZCBqc01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CiAg
ICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQog
ICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2lzX251bWJlcikKICAgICAg
ICAgREVGSU5FX09QKG9wX2lzX3N0cmluZykKICAgICAgICAgREVGSU5FX09QKG9wX2lzX2pzYXJy
YXkpCisgICAgICAgIERFRklORV9PUChvcF9pc19qc21hcCkKICAgICAgICAgREVGSU5FX09QKG9w
X2lzX29iamVjdCkKICAgICAgICAgREVGSU5FX09QKG9wX2plcV9udWxsKQogICAgICAgICBERUZJ
TkVfT1Aob3BfamZhbHNlKQpAQCAtMzUzLDYgKzM1NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIAogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwpCisgICAgICAgIERFRklORV9PUChvcF9qc21hcF9oYXNoKQogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNiAr
NTI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pc19udW1iZXIo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2lzX3N0cmluZyhJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfanNhcnJheShJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGVtaXRfb3BfaXNfanNtYXAoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfamVx
X251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pmYWxzZShJbnN0cnVj
dGlvbiopOwpAQCAtNjA3LDYgKzYwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF9qc21hcF9oYXNoKEluc3RydWN0aW9uKik7CiAKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYml0YW5kKEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiAr
Mjc4LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2pzYXJyYXkoSW5zdHJ1Y3Rpb24KICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2lzX2pz
bWFwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVn
VDApOworCisgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNNYXBUeXBlKSwgcmVnVDApOworICAgIGVt
aXRUYWdCb29sKHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfanNtYXBfaGFzaChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisKKyAgICBKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgIEp1bXAgaXNOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2Vs
bChyZWdUMCk7CisgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVu
ZChicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVnVDApOworICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgdXJzaGlmdDMy
KFRydXN0ZWRJbW0zMig2KSwgcmVnVDApOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0
MzIoWmVybywgcmVnVDApKTsKKyAgICBhdXRvIGp1bXBUb0JveGluZyA9IGp1bXAoKTsKKworICAg
IGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDApKTsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKGJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MocmVnVDApKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisKKyAg
ICBzdHJhaWdodEhhc2gubGluayh0aGlzKTsKKworICAgIGpzTWFwSGFzaChyZWdUMCwgcmVnVDEp
OworICAgIGp1bXBUb0JveGluZy5saW5rKHRoaXMpOworICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKHRoaXMpOworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfanNtYXBfaGFzaCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBkb25lLmxpbmso
dGhpcyk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDcgQEAgdHlwZWRlZiBpbnQ2
NF90IChKSVRfT1BFUkFUSU9OICpRX0pJVE9wZQogdHlwZWRlZiBpbnQzMl90IChKSVRfT1BFUkFU
SU9OICpaX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBpbnQzMl90IChKSVRfT1BF
UkFUSU9OICpaX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgaW50MzJfdCAo
SklUX09QRVJBVElPTiAqWl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwor
dHlwZWRlZiBpbnQzMl90IChKSVRfT1BFUkFUSU9OICpaX0pJVE9wZXJhdGlvbl9FQ0opKEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgaW50MzJfdCAoSklUX09Q
RVJBVElPTiAqWl9KSVRPcGVyYXRpb25fRUdDKShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IEpTQ2VsbCopOwogdHlwZWRlZiBpbnQzMl90IChKSVRfT1BFUkFUSU9OICpaX0pJVE9wZXJhdGlv
bl9FU0pzcykoRXhlY1N0YXRlKiwgc2l6ZV90LCBKU1N0cmluZyopOwogdHlwZWRlZiBpbnQzMl90
IChKSVRfT1BFUkFUSU9OICpaX0pJVE9wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJ
KHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAsNiArMTYwLDcgQEAgdm9pZCBEYXRhOjpwZXJm
b3JtQXNzZXJ0aW9ucyhWTSYgdm0pCiAgICAgU1RBVElDX0FTU0VSVChGaW5hbE9iamVjdFR5cGUg
PT0gMjEpOwogICAgIFNUQVRJQ19BU1NFUlQoSlNGdW5jdGlvblR5cGUgPT0gMjMpOwogICAgIFNU
QVRJQ19BU1NFUlQoQXJyYXlUeXBlID09IDI5KTsKKyAgICBTVEFUSUNfQVNTRVJUKEpTTWFwVHlw
ZSA9PSAxMTcpOwogICAgIFNUQVRJQ19BU1NFUlQoSW50OEFycmF5VHlwZSA9PSAxMDApOwogICAg
IFNUQVRJQ19BU1NFUlQoSW50MTZBcnJheVR5cGUgPT0gMTAxKTsKICAgICBTVEFUSUNfQVNTRVJU
KEludDMyQXJyYXlUeXBlID09IDEwMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE0OTAsNyArMTQ5MCw2IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9kZWJ1ZykK
ICAgICBMTElOVF9CRUdJTigpOwogICAgIGludCBkZWJ1Z0hvb2tJRCA9IHBjWzFdLnUub3BlcmFu
ZDsKICAgICB2bS5pbnRlcnByZXRlci0+ZGVidWcoZXhlYywgc3RhdGljX2Nhc3Q8RGVidWdIb29r
SUQ+KGRlYnVnSG9va0lEKSk7Ci0gICAgCiAgICAgTExJTlRfRU5EKCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTE5OSwyMCArMTE5
OSwxMDggQEAgX2xsaW50X29wX2lzX3N0cmluZzoKICAgICBzdG9yZXEgVmFsdWVGYWxzZSwgW2Nm
ciwgdDIsIDhdCiAgICAgZGlzcGF0Y2goMykKIAotCi1fbGxpbnRfb3BfaXNfanNhcnJheToKLSAg
ICB0cmFjZUV4ZWN1dGlvbigpCittYWNybyBlbWl0SXNDZXJ0YWluSlNUeXBlKHR5cGUpCiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigx
LCB0MikKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MCkKLSAgICBidHFueiB0MCwg
dGFnTWFzaywgLm9wSXNKU0FycmF5Tm90Q2VsbAotICAgIGNiZXEgSlNDZWxsOjptX3R5cGVbdDBd
LCBBcnJheVR5cGUsIHQxCisgICAgYnRxbnogdDAsIHRhZ01hc2ssIC5qc1R5cGVOb3RDZWxsCisg
ICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0MF0sIHR5cGUsIHQxCiAgICAgb3JxIFZhbHVlRmFsc2Us
IHQxCiAgICAgc3RvcmVxIHQxLCBbY2ZyLCB0MiwgOF0KICAgICBkaXNwYXRjaCgzKQotLm9wSXNK
U0FycmF5Tm90Q2VsbDoKKy5qc1R5cGVOb3RDZWxsOgogICAgIHN0b3JlcSBWYWx1ZUZhbHNlLCBb
Y2ZyLCB0MiwgOF0KICAgICBkaXNwYXRjaCgzKQorZW5kCisKK19sbGludF9vcF9pc19qc2FycmF5
OgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBlbWl0SXNDZXJ0YWluSlNUeXBlKEFycmF5VHlw
ZSkKKworCitfbGxpbnRfb3BfaXNfanNtYXA6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGVt
aXRJc0NlcnRhaW5KU1R5cGUoSlNNYXBUeXBlKQorCitfbGxpbnRfb3BfanNtYXBfaGFzaDoKKyAg
ICB0cmFjZUV4ZWN1dGlvbigpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQorICAg
IGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQwKQorICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAu
anNNYXBIYXNoTm90Q2VsbAorICAgIGJibmVxIEpTQ2VsbDo6bV90eXBlW3QwXSwgU3RyaW5nVHlw
ZSwgLnN0cmFpZ2h0SGFzaAorICAgIGxvYWRwIEpTU3RyaW5nOjptX3ZhbHVlW3QwXSwgdDAKKyAg
ICBidHB6IHQwLCAuc2xvd1BhdGgKKyAgICBsb2FkaSBTdHJpbmdJbXBsOjptX2hhc2hBbmRGbGFn
c1t0MF0sIHQwCisgICAgdXJzaGlmdGkgNiwgdDAgIyBGSVhNRSBzdGF0aWMgYXNzZXJ0IDYgZm9y
IHNfZmxhZ0NvdW50IG9mIFN0cmluZ0ltcGwhCisgICAgYnRpeiB0MCwgLnNsb3dQYXRoCisgICAg
am1wIC5ib3hVcFJlc3VsdAorICAgICAKKy5zbG93UGF0aDoKKyAgICBjYWxsT3Bjb2RlU2xvd1Bh
dGgoX3Nsb3dfcGF0aF9qc21hcF9oYXNoKQorICAgIGRpc3BhdGNoKDMpCisuanNNYXBIYXNoTm90
Q2VsbDoKKyAgICBicWIgdDAsIHRhZ1R5cGVOdW1iZXIsIC5vcDFOb3RJbnQKKyAgICBqbXAgLnN0
cmFpZ2h0SGFzaAorLm9wMU5vdEludDoKKyAgICBidHF6IHQwLCB0YWdUeXBlTnVtYmVyLCAuc3Ry
YWlnaHRIYXNoCisgICAgIyBGSVhNRSBtYWtlIGRvdWJsZSBjYXNlIGZhc3QKKyAgICBjYWxsT3Bj
b2RlU2xvd1BhdGgoX3Nsb3dfcGF0aF9qc21hcF9oYXNoKQorICAgIGRpc3BhdGNoKDMpCisuc3Ry
YWlnaHRIYXNoOgorICAgIG1vdmUgdDAsIHQxCisjIGtleSArPSB+KGtleSA8PCAzMik7CisgICAg
bHNoaWZ0cCAzMiwgdDEKKyAgICBub3RxIHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChr
ZXkgPj4gMjIpOworICAgIG1vdmUgdDAsIHQxCisgICAgdXJzaGlmdHAgMjIsIHQxCisgICAgeG9y
cSB0MSwgdDAKKyMga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIGxz
aGlmdHAgMTMsIHQxCisgICAgbm90cSB0MQorICAgIGFkZHEgdDEsIHQwCisjIGtleSBePSAoa2V5
ID4+IDgpOworICAgIG1vdmUgdDAsIHQxCisgICAgdXJzaGlmdHAgOCwgdDEKKyAgICB4b3JxIHQx
LCB0MAorIyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIGxzaGlmdHAg
MywgdDEKKyAgICBhZGRxIHQxLCB0MAorIyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92ZSB0
MCwgdDEKKyAgICB1cnNoaWZ0cCAxNSwgdDEKKyAgICB4b3JxIHQxLCB0MAorIyBrZXkgKz0gfihr
ZXkgPDwgMjcpOworICAgIG1vdmUgdDAsIHQxCisgICAgbHNoaWZ0cCAyNywgdDEKKyAgICBub3Rx
IHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChrZXkgPj4gMzEpOworICAgIG1vdmUgdDAs
IHQxCisgICAgdXJzaGlmdHAgMzEsIHQxCisgICAgeG9ycSB0MSwgdDAKKy5ib3hVcFJlc3VsdDoK
KyAgICBhbmRxIDQyOTQ5NjcyOTUsIHQwICMgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkK
KyAgICBvcnEgdGFnVHlwZU51bWJlciwgdDAKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwg
dDIpCisgICAgc3RvcmVxIHQwLCBbY2ZyLCB0MiwgOF0KKyAgICBkaXNwYXRjaCgzKQorCisKKyMg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQxKQorIyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMSwgdDIpCisjICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQwKQorIyAgICBidHFu
eiB0MCwgdGFnTWFzaywgLm9wSXNKU0FycmF5Tm90Q2VsbAorIyAgICBjYmVxIEpTQ2VsbDo6bV90
eXBlW3QwXSwgQXJyYXlUeXBlLCB0MQorIyAgICBvcnEgVmFsdWVGYWxzZSwgdDEKKyMgICAgc3Rv
cmVxIHQxLCBbY2ZyLCB0MiwgOF0KKyMgICAgZGlzcGF0Y2goMykKKyMub3BJc0pTQXJyYXlOb3RD
ZWxsOgorIyAgICBzdG9yZXEgVmFsdWVGYWxzZSwgW2NmciwgdDIsIDhdCisjICAgIGRpc3BhdGNo
KDMpCiAKIAogX2xsaW50X29wX2lzX29iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIwNDky
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFz
bQkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDYgKzM0Nyw3IEBAIGNvbnN0IE9iamVjdFR5cGUgPSAy
MAogY29uc3QgRmluYWxPYmplY3RUeXBlID0gMjEKIGNvbnN0IEpTRnVuY3Rpb25UeXBlID0gMjMK
IGNvbnN0IEFycmF5VHlwZSA9IDI5Citjb25zdCBKU01hcFR5cGUgPSAxMTcKIAogIyBUaGUgdHlw
ZWQgYXJyYXkgdHlwZXMgbmVlZCB0byBiZSBudW1iZXJlZCBpbiBhIHBhcnRpY3VsYXIgb3JkZXIg
YmVjYXVzZSBvZiB0aGUgbWFudWFsbHkgd3JpdHRlbgogIyBzd2l0Y2ggc3RhdGVtZW50IGluIGdl
dF9ieV92YWwgYW5kIHB1dF9ieV92YWwuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2Zm
bGluZWFzbS9pbnN0cnVjdGlvbnMucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9pbnN0cnVjdGlvbnMucmIJKHdvcmtpbmcgY29w
eSkKQEAgLTQxLDYgKzQxLDcgQEAgTUFDUk9fSU5TVFJVQ1RJT05TID0KICAgICAgIm5lZ3AiLAog
ICAgICAibmVncSIsCiAgICAgICJub3RpIiwKKyAgICAgIm5vdHEiLAogICAgICAib3JpIiwKICAg
ICAgInJzaGlmdGkiLAogICAgICAidXJzaGlmdGkiLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20veDg2LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL3g4Ni5yYgkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL29mZmxpbmVhc20veDg2LnJiCSh3b3JraW5nIGNvcHkpCkBAIC05MDEsNiArOTAxLDgg
QEAgY2xhc3MgSW5zdHJ1Y3Rpb24KICAgICAgICAgICAgICRhc20ucHV0cyAibmVnI3t4ODZTdWZm
aXgoOnF1YWQpfSAje3g4Nk9wZXJhbmRzKDpxdWFkKX0iCiAgICAgICAgIHdoZW4gIm5vdGkiCiAg
ICAgICAgICAgICAkYXNtLnB1dHMgIm5vdCN7eDg2U3VmZml4KDppbnQpfSAje3g4Nk9wZXJhbmRz
KDppbnQpfSIKKyAgICAgICAgd2hlbiAibm90cSIKKyAgICAgICAgICAgICRhc20ucHV0cyAibm90
I3t4ODZTdWZmaXgoOnF1YWQpfSAje3g4Nk9wZXJhbmRzKDpxdWFkKX0iCiAgICAgICAgIHdoZW4g
Im9yaSIKICAgICAgICAgICAgIGhhbmRsZVg4Nk9wKCJvciN7eDg2U3VmZml4KDppbnQpfSIsIDpp
bnQpCiAgICAgICAgIHdoZW4gIm9ycCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25t
ZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCIKICNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgi
CkBAIC05MzMsNCArOTM0LDExIEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmFs
X3dpdGgKICAgICBFTkQoKTsKIH0KIAorU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2pzbWFwX2hh
c2gpCit7CisgICAgQkVHSU4oKTsKKyAgICBKU1ZhbHVlIHZhbHVlVG9IYXNoID0gT1BfQygyKS5q
c1ZhbHVlKCk7CisgICAgUkVUVVJOKEpTVmFsdWUoanNNYXBIYXNoKGV4ZWMsIHZhbHVlVG9IYXNo
KSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjU4LDYgKzI1OCw3IEBAIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Z2V0X2J5X2kKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfZ2V0X2J5X3ZhbF93aXRo
X3RoaXMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWRfd2l0aF90
aGlzKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X2J5X3ZhbF93aXRoX3Ro
aXMpOworU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9qc21hcF9oYXNoKTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRyaW5zaWMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBlbnVtIEpT
X0VYUE9SVF9QUklWQVRFIEludHJpbnNpYyB7CiAgICAgSXNSZWdFeHBPYmplY3RJbnRyaW5zaWMs
CiAgICAgSXNUeXBlZEFycmF5Vmlld0ludHJpbnNpYywKICAgICBCb3VuZFRoaXNOb0FyZ3NGdW5j
dGlvbkNhbGxJbnRyaW5zaWMsCisgICAgSlNNYXBHZXRJbnRyaW5zaWMsCisgICAgSlNNYXBIYXNJ
bnRyaW5zaWMsCiAKICAgICAvLyBHZXR0ZXIgaW50cmluc2ljcy4KICAgICBUeXBlZEFycmF5TGVu
Z3RoSW50cmluc2ljLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjUs
NyArNzI1LDYgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
aXNTZXRQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmlu
ZygpLCBwcml2YXRlRnVuY0lzU2V0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
LAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuU2V0SXRlcmF0b3JQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRo
aXMsIDEsIFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yKSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0SXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUoKSwgSlNG
dW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAwLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNTZXRJdGVy
YXRvck5leHQpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCi0gICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc01hcFBy
aXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHBy
aXZhdGVGdW5jSXNNYXApLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5p
c0FycmF5UHJpdmF0ZU5hbWUoKSwgYXJyYXlDb25zdHJ1Y3Rvci0+Z2V0RGlyZWN0KHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pc0FycmF5KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
LAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuaXNBcnJheUNvbnN0cnVjdG9yUHJpdmF0ZU5hbWUoKSwgcHJpdmF0ZUZ1bmNJc0FycmF5
Q29uc3RydWN0b3IsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAg
R2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmNvbmNh
dE1lbWNweVByaXZhdGVOYW1lKCksIHByaXZhdGVGdW5jQ29uY2F0TWVtY3B5LCBEb250RW51bSB8
IERvbnREZWxldGUgfCBSZWFkT25seSksCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXAuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxNSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCiAKKyNpbmNsdWRlICJCdWlsdGlu
TmFtZXMuaCIKKyNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNvcGll
ZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAi
SlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAi
T2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCiAKQEAgLTM3LDYgKzQyLDQ2IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNl
OjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNNYXApIH07CiAKK3ZvaWQgSlNNYXA6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKK3sK
KyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICBzdGF0aWNfYXNzZXJ0KEJBU0Vf
VkVDVE9SX0xFTiA9PSA0LCAiYXNzdW1lZCBoZXJlIHRvIGJlIGEgcG93ZXIgb2YgMiIpOworICAg
IEpTQXJyYXkqIGFycmF5ID0gSlNBcnJheTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1
b3VzKSwgQkFTRV9WRUNUT1JfTEVOKTsKKyAgICBSRUxFQVNFX0FTU0VSVChhcnJheSk7CisgICAg
UkVMRUFTRV9BU1NFUlQoYXJyYXktPmxlbmd0aCgpID09IEJBU0VfVkVDVE9SX0xFTik7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQkFTRV9WRUNUT1JfTEVOOyBpKyspCisgICAgICAg
IGFycmF5LT5wdXRCeUluZGV4SW5saW5lKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBpLCBq
c1VuZGVmaW5lZCgpLCBmYWxzZSk7CisKKyAgICBKU09iamVjdCogaGVhZCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKKyAgICBKU09iamVjdCogdGFp
bCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKTsKKyAg
ICBhdXRvIG1ha2VTaGFwZSA9IFsmXSAoSlNPYmplY3QqIG9iaiwgSlNWYWx1ZSBsaXN0TmV4dCwg
SlNWYWx1ZSBsaXN0UHJldikgeworICAgICAgICAvKgorICAgICAgICBsaXN0TmV4dDogbWFwVGFp
bCwKKyAgICAgICAgbGlzdFByZXY6IG1hcFRhaWwubGlzdFByZXYsCisgICAgICAgIGtleToga2V5
LAorICAgICAgICB2YWx1ZTogdmFsdWUsCisgICAgICAgIGRlbGV0ZWQ6IGZhbHNlCisgICAgICAg
ICovCisKKyAgICAgICAgb2JqLT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAibGlzdE5leHQiKSwgbGlzdE5leHQsIDApOworICAgICAgICBvYmotPnB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJsaXN0UHJldiIpLCBsaXN0UHJldiwgMCk7
CisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwg
ImtleSIpLCBqc051bGwoKSwgMCk7CisgICAgICAgIG9iai0+cHV0RGlyZWN0KHZtLCBJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKCZ2bSwgInZhbHVlIiksIGpzTnVsbCgpLCAwKTsKKyAgICAgICAgb2Jq
LT5wdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAiZGVsZXRlZCIpLCBq
c0Jvb2xlYW4odHJ1ZSksIDApOworICAgICAgICAKKyAgICB9OworCisgICAgbWFrZVNoYXBlKGhl
YWQsIHRhaWwsIGpzTnVsbCgpKTsKKyAgICBtYWtlU2hhcGUodGFpbCwganNOdWxsKCksIGhlYWQp
OworCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5t
YXBIZWFkUHJpdmF0ZU5hbWUoKSwgaGVhZCwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwVGFpbFByaXZhdGVOYW1lKCksIHRh
aWwsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLm1hcFRhYmxlUHJpdmF0ZU5hbWUoKSwgYXJyYXksIERvbnRFbnVtKTsKKyAgICBw
dXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1hcFNpemVQcml2
YXRlTmFtZSgpLCBqc051bWJlcigwKSwgRG9udEVudW0pOworfQorCiB2b2lkIEpTTWFwOjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBKU01hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01h
cCo+KGNlbGwpOwpAQCAtNTMsNyArOTgsMTYgQEAgc2l6ZV90IEpTTWFwOjplc3RpbWF0ZWRTaXpl
KEpTQ2VsbCogY2VsbAogdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVu
KGNlbGwsIHZpc2l0b3IpOworICAgIC8vanNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworCisgICAgSlNNYXAqIHRoaXNWYWx1ZSA9IGpz
Q2FzdDxKU01hcCo+KGNlbGwpOworICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IHRoaXNWYWx1
ZS0+bV9tYXAubV9oZWFkLT5uZXh0OworICAgIEhhc2hNYXBCdWNrZXQqIGVuZCA9IHRoaXNWYWx1
ZS0+bV9tYXAubV90YWlsOworICAgIHdoaWxlIChidWNrZXQgIT0gZW5kKSB7CisgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZidWNrZXQtPmtleSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidWNr
ZXQtPnZhbHVlKTsKKyAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0OworICAgIH0KIH0KIAog
dm9pZCBKU01hcDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2
aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCkBAIC02MiwyNyArMTE2LDI1IEBAIHZvaWQgSlNNYXA6
OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWwKICAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+
bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOwogfQogCi1ib29sIEpT
TWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKK3NpemVfdCBKU01hcDo6c2l6
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5jb250YWlucyhleGVj
LCBrZXkpOworICAgIHJldHVybiBtX21hcERhdGEuc2l6ZShleGVjKTsKIH0KIAotc2l6ZV90IEpT
TWFwOjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKKy8qCitib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGtleSkKIHsKLSAgICByZXR1cm4gbV9tYXBEYXRhLnNpemUoZXhlYyk7
CisgICAgcmV0dXJuIG1fbWFwRGF0YS5jb250YWlucyhleGVjLCBrZXkpOwogfQogCiBKU1ZhbHVl
IEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKIHsKLSAgICBKU1ZhbHVl
IHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gbV9tYXAuZ2V0KGV4ZWMsIGtleSk7CiB9CiAKIHZvaWQgSlNNYXA6OnNldChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIG1fbWFwRGF0YS5zZXQo
ZXhlYywgdGhpcywga2V5LCB2YWx1ZSk7CisgICAgbV9tYXAuc2V0KGV4ZWMsIHRoaXMsIGtleSwg
dmFsdWUpOwogfQogCiB2b2lkIEpTTWFwOjpjbGVhcihFeGVjU3RhdGUqKQpAQCAtOTQsNSArMTQ2
LDYgQEAgYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogewogICAgIHJl
dHVybiBtX21hcERhdGEucmVtb3ZlKGV4ZWMsIGtleSk7CiB9CisqLwogCiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYg
KzMyLDI2NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorLy8gbGlzdE5leHQ6IG1hcFRhaWwsCisv
LyBsaXN0UHJldjogbWFwVGFpbC5saXN0UHJldiwKKy8vIGtleToga2V5LAorLy8gdmFsdWU6IHZh
bHVlLAorLy8gZGVsZXRlZDogZmFsc2UKKworc3RydWN0IEhhc2hNYXBCdWNrZXQgeworICAgIEhh
c2hNYXBCdWNrZXQqIG5leHQ7CisgICAgSGFzaE1hcEJ1Y2tldCogcHJldjsKKyAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4ga2V5OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiB2YWx1ZTsKKyAg
ICBib29sIGRlbGV0ZWQ7Cit9OworCisvLyBGSVhNRTogbWFrZSB0aGlzIEFMV0FZU19JTkxJTkUg
aW5zaWRlIFByb3BlcnR5RGVzY3JpcHRvcgorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBzYW1l
VmFsdWVNYXAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICBp
ZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWEuaXNOdW1iZXIoKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGEsIGIpOworICAgIGlm
ICghYi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG91YmxlIHggPSBh
LmFzTnVtYmVyKCk7CisgICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7CisgICAgYm9vbCB4SXNO
YU4gPSBzdGQ6OmlzbmFuKHgpOworICAgIGJvb2wgeUlzTmFOID0gc3RkOjppc25hbih5KTsKKyAg
ICBpZiAoeElzTmFOIHx8IHlJc05hTikKKyAgICAgICAgcmV0dXJuIHhJc05hTiAmJiB5SXNOYU47
CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgPT0gYml0d2lzZV9jYXN0PHVp
bnQ2NF90Pih5KTsKK30KKworQUxXQVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKSB7
CisgICAgICAgIGRvdWJsZSBkID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFzdGQ6
OmlzbmFuKGQpKSB7CisgICAgICAgICAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4oZCk7Cisg
ICAgICAgICAgICBpZiAoaSA9PSBkKQorICAgICAgICAgICAgICAgIHZhbHVlID0ganNOdW1iZXIo
aSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAg
ICAgLy9zdGF0aWMgZG91YmxlIHNsb3dDYXNlcyA9IDAuMDsKKyAgICAgICAgLy9zdGF0aWMgZG91
YmxlIGhhc0hhc2ggPSAwLjA7CisgICAgICAgIC8vZGF0YUxvZygianNNYXBIYXNoIHNsb3cgcGF0
aCBzdHJpbmchXG4iKTsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVl
KTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiB3dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMp
OworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4g
VUlOVF9NQVg7CisgICAgICAgIC8vc2xvd0Nhc2VzKys7CisgICAgICAgIC8vaWYgKHd0ZlN0cmlu
Zy5pbXBsKCktPmhhc0hhc2goKSkKKyAgICAgICAgLy8gICAgaGFzSGFzaCsrOworICAgICAgICAv
L2RhdGFMb2coIlBlcmNlbnQgaGFzaCIsIGhhc0hhc2gvc2xvd0Nhc2VzLCAiXG4iKTsKKyAgICAg
ICAgcmV0dXJuIHd0ZlN0cmluZy5pbXBsKCktPmhhc2goKTsKKyAgICB9CisgICAgdWludDY0X3Qg
cmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIHJldHVybiBXVEY6OmludEhh
c2gocmF3VmFsdWUpOworfQorCisKK2NsYXNzIEhhc2hNYXBJbXBsIHsKK3B1YmxpYzoKKyAgICBI
YXNoTWFwSW1wbCgpCisgICAgICAgIDogbV9zaXplKDApCisgICAgICAgICwgbV9kZWxldGVDb3Vu
dCgwKQorICAgICAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyID0g
c3RhdGljX2Nhc3Q8SGFzaE1hcEJ1Y2tldCoqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkgKiBzaXpl
b2YoSGFzaE1hcEJ1Y2tldCopKSk7CisgICAgICAgIG1lbXNldChtX2J1ZmZlciwgLTEsIG1fY2Fw
YWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldCopKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5
OyBpKyspCisgICAgICAgICAgICAgICAgQVNTRVJUKGlzRW1wdHkobV9idWZmZXJbaV0pKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1faGVhZCA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWNrZXQqPihm
YXN0TWFsbG9jKHNpemVvZihIYXNoTWFwQnVja2V0KSkpOworICAgICAgICBtX3RhaWwgPSBzdGF0
aWNfY2FzdDxIYXNoTWFwQnVja2V0Kj4oZmFzdE1hbGxvYyhzaXplb2YoSGFzaE1hcEJ1Y2tldCkp
KTsKKworICAgICAgICBtX2hlYWQtPnByZXYgPSBudWxscHRyOworICAgICAgICBtX2hlYWQtPm5l
eHQgPSBtX3RhaWw7CisgICAgICAgIG1fdGFpbC0+cHJldiA9IG1faGVhZDsKKyAgICAgICAgbV90
YWlsLT5uZXh0ID0gbnVsbHB0cjsKKworICAgICAgICBtX2hlYWQtPmRlbGV0ZWQgPSB0cnVlOwor
ICAgICAgICBtX3RhaWwtPmRlbGV0ZWQgPSB0cnVlOworICAgIH0KKworICAgIHN0YXRpYyBIYXNo
TWFwQnVja2V0KiBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8SGFzaE1hcEJ1Y2tldCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTEpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRW1wdHkoSGFzaE1hcEJ1Y2tldCogYnVj
a2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBlbXB0eVZhbHVlKCk7CisgICAg
fQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXQqIGRlbGV0ZWRWYWx1ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBCdWNrZXQqPihzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KC0zKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Rl
bGV0ZWQoSGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tl
dCA9PSBkZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1h
cEJ1Y2tldCoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgdWludDMy
X3QqIGluZGV4T2ZCdWNrZXQgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDMy
X3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFw
SGFzaChleGVjLCBrZXkpICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0g
bV9idWZmZXJbaW5kZXhdOworCisgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7Cisg
ICAgICAgICAgICBpZiAoIWlzRGVsZXRlZChidWNrZXQpICYmIHNhbWVWYWx1ZU1hcChleGVjLCBr
ZXksIGJ1Y2tldC0+a2V5LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGlmIChpbmRleE9mQnVj
a2V0KQorICAgICAgICAgICAgICAgICAgICAqaW5kZXhPZkJ1Y2tldCA9IGluZGV4OworICAgICAg
ICAgICAgICAgIHJldHVybiBtX2J1ZmZlciArIGluZGV4OworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNrZXQgPSBt
X2J1ZmZlcltpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgLy8gUmV0dXJucyBVSU5UX01BWCBmb3IgZW50cmllcyBub3QgaW4gdGhlIG1hcC4K
KyAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGZpbmRCdWNrZXRJbmRleChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgdWludDMyX3QgcmVzdWx0ID0gVUlOVF9N
QVg7CisgICAgICAgIGZpbmRCdWNrZXQoZXhlYywga2V5LCAmcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBpZiAoSGFzaE1hcEJ1Y2tl
dCoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KSkKKyAgICAgICAgICAgIHJldHVybiAo
KmJ1Y2tldCktPnZhbHVlLmdldCgpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gISFmaW5kQnVja2V0KGV4ZWMsIGtleSk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2Vs
bCogb3duZXIsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNp
dHkgLSAxOworICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBrZXkpICYg
bWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbV9idWZmZXJbaW5kZXhdOwor
ICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSAmJiAhaXNEZWxldGVkKGJ1Y2tldCkpIHsK
KyAgICAgICAgICAgIGlmIChzYW1lVmFsdWVNYXAoZXhlYywga2V5LCBidWNrZXQtPmtleS5nZXQo
KSkpIHsKKyAgICAgICAgICAgICAgICBidWNrZXQtPnZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVl
KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tldCA9IG1fYnVmZmVy
W2luZGV4XTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIG5ld0VudHJ5ID0g
bV90YWlsOworICAgICAgICBtX2J1ZmZlcltpbmRleF0gPSBuZXdFbnRyeTsKKyAgICAgICAgbmV3
RW50cnktPmtleS5zZXQodm0sIG93bmVyLCBrZXkpOworICAgICAgICBuZXdFbnRyeS0+dmFsdWUu
c2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAgICBuZXdFbnRyeS0+ZGVsZXRlZCA9IGZhbHNl
OworICAgICAgICBIYXNoTWFwQnVja2V0KiBuZXdUYWlsID0gc3RhdGljX2Nhc3Q8SGFzaE1hcEJ1
Y2tldCo+KGZhc3RNYWxsb2Moc2l6ZW9mKEhhc2hNYXBCdWNrZXQpKSk7CisgICAgICAgIG1fdGFp
bCA9IG5ld1RhaWw7CisgICAgICAgIG5ld1RhaWwtPm5leHQgPSBudWxscHRyOworICAgICAgICBu
ZXdUYWlsLT5wcmV2ID0gbmV3RW50cnk7CisgICAgICAgIG5ld1RhaWwtPmRlbGV0ZWQgPSB0cnVl
OworICAgICAgICBuZXdFbnRyeS0+bmV4dCA9IG5ld1RhaWw7CisgICAgICAgIHVpbnQzMl90IG5l
d1NpemUgPSArK21fc2l6ZTsKKyAgICAgICAgaWYgKDIqbmV3U2l6ZSA+IG1fY2FwYWNpdHkpCisg
ICAgICAgICAgICByZWhhc2goZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29s
IHJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldCoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAgICAgaWYg
KCFidWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gRklYTUU6
IHN0b3AgbGVha2luZyBtZW1vcnkgaGVyZSwgYW5kIGZpZ3VyZSBvdXQgaXRlcmF0b3JzLgorICAg
ICAgICBIYXNoTWFwQnVja2V0KiBpbXBsID0gKmJ1Y2tldDsKKyAgICAgICAgaW1wbC0+bmV4dC0+
cHJldiA9IGltcGwtPnByZXY7CisgICAgICAgIGltcGwtPnByZXYtPm5leHQgPSBpbXBsLT5uZXh0
OworICAgICAgICBpbXBsLT5kZWxldGVkID0gdHJ1ZTsKKworICAgICAgICAqYnVja2V0ID0gZGVs
ZXRlZFZhbHVlKCk7CisKKyAgICAgICAgbV9kZWxldGVDb3VudCsrOworCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHZvaWQgcmVoYXNoKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7
CisgICAgICAgIG1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5ICogMjsKKyAgICAgICAgZmFzdEZyZWUo
bV9idWZmZXIpOworICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWNrZXQq
Kj4oZmFzdE1hbGxvYyhtX2NhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXQqKSkpOworICAg
ICAgICBtZW1zZXQobV9idWZmZXIsIC0xLCBtX2NhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNr
ZXQqKSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAgICAgICAgICAgIEFT
U0VSVChpc0VtcHR5KG1fYnVmZmVyW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgSGFzaE1hcEJ1
Y2tldCogaXRlciA9IG1faGVhZC0+bmV4dDsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogZW5kID0g
bV90YWlsOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7Cisg
ICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgeworICAgICAgICAgICAgdWludDMyX3QgaW5kZXgg
PSBqc01hcEhhc2goZXhlYywgaXRlci0+a2V5LmdldCgpKSAmIG1hc2s7CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVCghKG1fY2FwYWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbV9idWZmZXJb
aW5kZXhdOworICAgICAgICAgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAg
ICAgICAgICBidWNrZXQgPSBtX2J1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbV9idWZmZXJbaW5kZXhdID0gaXRlcjsKKyAgICAgICAg
ICAgIGl0ZXIgPSBpdGVyLT5uZXh0OworICAgICAgICB9CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB1aW50MzJfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fc2l6ZSA+PSBtX2RlbGV0ZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZSAtIG1fZGVs
ZXRlQ291bnQ7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyKCkKKyAgICB7
CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGl0ZXIgPSBtX2hlYWQtPm5leHQ7CisgICAgICAgIEhh
c2hNYXBCdWNrZXQqIGVuZCA9IG1fdGFpbDsKKyAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7
CisgICAgICAgICAgICBIYXNoTWFwQnVja2V0KiBuZXh0ID0gaXRlci0+bmV4dDsKKyAgICAgICAg
ICAgIGZhc3RGcmVlKGl0ZXIpOworICAgICAgICAgICAgaXRlciA9IG5leHQ7CisgICAgICAgIH0K
KworICAgICAgICBtX3NpemUgPSAwOworICAgICAgICBtX2NhcGFjaXR5ID0gNDsKKyAgICAgICAg
bV9kZWxldGVDb3VudCA9IDA7CisgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKKyAgICAgICAg
bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVja2V0Kio+KGZhc3RNYWxsb2MobV9jYXBh
Y2l0eSAqIHNpemVvZihIYXNoTWFwQnVja2V0KikpKTsKKyAgICAgICAgbWVtc2V0KG1fYnVmZmVy
LCAtMSwgbV9jYXBhY2l0eSAqIHNpemVvZihIYXNoTWFwQnVja2V0KikpOworCisgICAgICAgIG1f
aGVhZC0+bmV4dCA9IG1fdGFpbDsKKyAgICAgICAgbV90YWlsLT5wcmV2ID0gbV9oZWFkOworICAg
IH0KKworLy8gRklYTUU6IG1ha2UgcHJpdmF0ZS4KK3B1YmxpYzoKKyAgICBIYXNoTWFwQnVja2V0
KiBtX2hlYWQ7CisgICAgSGFzaE1hcEJ1Y2tldCogbV90YWlsOworICAgIEhhc2hNYXBCdWNrZXQq
KiBtX2J1ZmZlcjsgICAgCisgICAgdWludDMyX3QgbV9zaXplOworICAgIHVpbnQzMl90IG1fZGVs
ZXRlQ291bnQ7CisgICAgdWludDMyX3QgbV9jYXBhY2l0eTsKK307CisKIGNsYXNzIEpTTWFwSXRl
cmF0b3I7CiAKIGNsYXNzIEpTTWFwIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKQEAg
LTkyLDI3ICszNTMsNDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTTWFwVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU01hcCogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU01hcD4odm0uaGVhcCkpIEpTTWFwKHZtLCBzdHJ1Y3R1cmUp
OwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBpbnN0YW5j
ZS0+ZmluaXNoQ3JlYXRpb24odm0sIHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBm
aW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisKICAgICBzdGF0aWMgSlNNYXAq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAotICAg
IGJvb2wgaGFzKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0
ZSopOwotICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0KEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVl
KTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0
ZSosIEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC5nZXQoZXhlYywg
a2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAuaGFzKGV4ZWMsIGtl
eSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9tYXAuc2V0KGV4
ZWMsIHRoaXMsIGtleSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSop
CisgICAgeworICAgICAgICBtX21hcC5jbGVhcigpOworICAgIH0KKyAgICBib29sIHJlbW92ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFw
LnJlbW92ZShleGVjLCBrZXkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBKU01hcChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMTI2LDYgKzQwNiw5IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogICAgIHN0
YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9r
ZW4pOwogCisgICAgLy8gRklYTUU6IGRvbid0IG1ha2UgdGhpcyBwdWJsaWMuCitwdWJsaWM6Cisg
ICAgSGFzaE1hcEltcGwgbV9tYXA7CiAgICAgTWFwRGF0YSBtX21hcERhdGE7CiB9OwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJCdWlsdGlu
TmFtZXMuaCIKKyNpbmNsdWRlICJDb21tb25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIklkZW50
aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKQEAgLTQxLDYgKzQ0LDEwIEBA
IHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVj
dCk7CisgICAgSlNPYmplY3QqIGxpc3RIZWFkID0ganNDYXN0PEpTT2JqZWN0Kj4oaXRlcmF0ZWRP
YmplY3QtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFw
SGVhZFByaXZhdGVOYW1lKCkpKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLm1hcEJ1Y2tldFByaXZhdGVOYW1lKCksIGxpc3RIZWFkLCBEb250RW51
bSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5t
YXBJdGVyYXRpb25LaW5kUHJpdmF0ZU5hbWUoKSwganNOdW1iZXIoc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KG1fa2luZCkpLCBEb250RW51bSk7CisgICAgbV9pdGVyID0gbV9tYXAtPm1fbWFwLm1faGVh
ZDsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE2
ICs1MywxOSBAQCBwdWJsaWM6CiAKICAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1
ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLm5leHQocGFpcikpCisg
ICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4dDsKKyAgICAgICAgd2hp
bGUgKGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQpCisgICAgICAgICAgICBidWNrZXQgPSBidWNr
ZXQtPm5leHQ7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBtX2l0ZXIgPSBidWNrZXQ7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVy
YXRlVmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2
YWx1ZSA9IGJ1Y2tldC0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGVsc2UgaWYgKG1fa2luZCA9PSBJ
dGVyYXRlS2V5KQotICAgICAgICAgICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAgIHZh
bHVlID0gYnVja2V0LT5rZXkuZ2V0KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVl
ID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICAgICAg
ICAgIHZhbHVlID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIGJ1Y2tldC0+a2V5LmdldCgpLCBidWNr
ZXQtPnZhbHVlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05Niwx
NCArOTksMTQgQEAgcHJpdmF0ZToKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAg
ICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bV9tYXBEYXRhLmNyZWF0ZUl0ZXJhdG9y
RGF0YSh0aGlzKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgfQorICAgIHsg
fQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTTWFw
Kik7CiAgICAgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUp
OwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
IAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7CisgICAgSGFzaE1hcEJ1Y2tldCogbV9p
dGVyOwogICAgIEpTTWFwOjpNYXBEYXRhOjpJdGVyYXRvckRhdGEgbV9pdGVyYXRvcjsKICAgICBJ
dGVyYXRpb25LaW5kIG1fa2luZDsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1R5cGUuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDkgQEAgZW51bSBKU1R5
cGUgOiB1aW50OF90IHsKICAgICBNb2R1bGVFbnZpcm9ubWVudFR5cGUsCiAgICAgUmVnRXhwT2Jq
ZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5cGUsCisgICAgSlNNYXBUeXBlLAogCi0gICAgTGFz
dEpTQ09iamVjdFR5cGUgPSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVjdFR5cGUg
PSBKU01hcFR5cGUsCiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9PSBzaXpl
b2YodWludDhfdCksIHNpemVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMjQgQEAK
ICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogCisjaW5jbHVkZSAiTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmgiCisKKy8qIFNvdXJjZSBm
b3IgTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBtYXBJdGVyYXRvclByb3RvdHlw
ZVRhYmxlCitAZW5kCisqLworICAvL25leHQgICAgICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0
aW9uIDAKKwogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBNYXBJdGVyYXRvclBy
b3RvdHlwZTo6c19pbmZvID0geyAiTWFwIEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShNYXBJdGVyYXRvclByb3RvdHlwZSkgfTsKK2NvbnN0IENsYXNzSW5m
byBNYXBJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiTWFwIEl0ZXJhdG9yIiwgJkJhc2U6
OnNfaW5mbywgJm1hcEl0ZXJhdG9yUHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUo
TWFwSXRlcmF0b3JQcm90b3R5cGUpIH07CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7CiAKIHZvaWQg
TWFwSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKKwog
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygp
KSk7CiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUu
aAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
SXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBjbGFz
cyBNYXBJdGVyYXRvclByb3RvdHlwZSA6IHB1YmxpYyBKU05vCiBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3Ry
dWN0dXJlRmxhZ3MgPSBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgQmFzZTo6U3RydWN0dXJlRmxh
Z3M7CisKICAgICBzdGF0aWMgTWFwSXRlcmF0b3JQcm90b3R5cGUqIGNyZWF0ZShWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsK
ICAgICAgICAgTWFwSXRlcmF0b3JQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPE1hcEl0ZXJhdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgTWFwSXRlcmF0b3JQ
cm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDggQEAgY29uc3QgQ2xhc3NJbmZvIE1hcFByb3RvdHlwZTo6c19pbmZvID0gewog
LyogU291cmNlIGZvciBNYXBQcm90b3R5cGUubHV0LmgKIEBiZWdpbiBtYXBQcm90b3R5cGVUYWJs
ZQogICBmb3JFYWNoICAgSlNCdWlsdGluICBEb250RW51bXxGdW5jdGlvbiAwCisgIGhhcyAgICAg
ICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgbGlzdEFzQXJyYXkgICAgICAgSlNC
dWlsdGluICBEb250RW51bXxGdW5jdGlvbiAwCiBAZW5kCiAqLwogCkBAIC03MCwxNSArNzIsMTYg
QEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiAgICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIs
IG1hcFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgbWFw
UHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQs
IERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOwor
ICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0
SW50cmluc2ljKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVt
LCAxLCBKU01hcEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNTZXQsIERvbnRF
bnVtLCAyKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1
bmNLZXlzLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFt
ZSgpLCBtYXBQcm90b0Z1bmNWYWx1ZXMsIERvbnRFbnVtLCAwKTsKIAotICAgIC8vIFByaXZhdGUg
Z2V0IC8gc2V0IG9wZXJhdGlvbnMuCi0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHJpdmF0ZU5hbWUo
KSwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0
UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CisgICAgLy9KU0Z1
bmN0aW9uKiBnZXRGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2
bSwgbWFwUHJvdG90eXBlR2V0Q29kZUdlbmVyYXRvcih2bSksIGdsb2JhbE9iamVjdCwgImdldCIp
OworICAgIC8vSlNGdW5jdGlvbiogc2V0RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGVCdWls
dGluRnVuY3Rpb24odm0sIG1hcFByb3RvdHlwZVNldENvZGVHZW5lcmF0b3Iodm0pLCBnbG9iYWxP
YmplY3QsICJzZXQiKTsKKyAgICAvL3B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2YXRlTmFtZSgpLCBnZXRGdW5jdGlv
biwgRG9udEVudW0pOworICAgIC8vcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnNldFByaXZhdGVOYW1lKCksIHNldEZ1bmN0aW9u
LCBEb250RW51bSk7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVuY0VudHJpZXMpOwogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLCBlbnRyaWVzLCBEb250RW51bSk7CkBAIC05MCwx
NiArOTMsMTMgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBKU01hcCogZ2V0TWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgaWYgKCF0aGlzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxG
cmFtZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgSlNNYXAqIG1hcCA9IGpzRHluYW1pY0Nh
c3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIHRocm93VHlw
ZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBu
b24tTWFwIG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJl
dHVybiBtYXA7CisgICAgaWYgKHRoaXNWYWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpTTWFwVHlw
ZSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7CisgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5j
Q2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xNTAsNyArMTUwLDEyIEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW4KICAgICBKU01hcCogbWFwID0gZ2V0TWFw
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihtYXAtPnNpemUoY2FsbEZyYW1lKSkpOworICAgIFZNJiB2
bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBKU1ZhbHVlIG1hcFNpemUgPSBtYXAtPmdldERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwU2l6ZVByaXZhdGVOYW1l
KCkpOworICAgIEpTVmFsdWUgZGVsZXRlQ291bnQgPSBtYXAtPmdldERpcmVjdCh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwRGVsZXRlQ291bnRQcml2YXRlTmFtZSgpKTsK
KyAgICBBU1NFUlQobWFwU2l6ZS5hc1VJbnQzMigpID49IGRlbGV0ZUNvdW50LmFzVUludDMyKCkp
OworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbWFwU2l6ZS5hc1VJbnQzMigpIC0gZGVsZXRl
Q291bnQuYXNVSW50MzIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51
bUVsZW1lbnRzKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9G
dW5jVmFsdWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTc3LDExICsxODIsNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUt
PmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09i
aiwgSXRlcmF0ZUtleSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZh
dGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSkpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01h
cEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxK
U01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkocmV2aXNpb24gMjA0OTI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
cHJpdmF0ZUZ1bmNJc01hcChFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287064</attachid>
            <date>2016-08-25 19:18:21 -0700</date>
            <delta_ts>2016-08-26 13:54:14 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>120226</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDQ5
MjYpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQCBKYXZh
U2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyBcCiAgICAgJChKYXZhU2Ny
aXB0Q29yZSkvYnVpbHRpbnMvSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgXAogICAgICQo
SmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzIFwKKyAgICAkKEph
dmFTY3JpcHRDb3JlKS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcyBcCiAgICAgJChK
YXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3Jp
cHRDb3JlKS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNj
cmlwdENvcmUpL2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpzIFwKQEAgLTE0Niw2ICsxNDcs
NyBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAg
SlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIFwKICAgICBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQu
aCBcCisgICAgTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmggXAogICAgIE1hcFByb3RvdHlwZS5s
dXQuaCBcCiAgICAgTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oIFwKICAgICBOdW1iZXJDb25z
dHJ1Y3Rvci5sdXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExOTgsNyArMTE5OCw3IEBA
CiAJCTUzRjQwRThEMUQ1OTAxRjIwMDk5QTFCNiAvKiBXQVNNUGFyc2VyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU4QzFENTkwMUYyMDA5OUEx
QjYgLyogV0FTTVBhcnNlci5oICovOyB9OwogCQk1M0Y0MEU4RjFENTkwMjgyMDA5OUExQjYgLyog
V0FTTUIzSVJHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNGNDBFOEUxRDU5MDI4MjAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9y
LmNwcCAqLzsgfTsKIAkJNTNGNDBFOTExRDU5MDMwMjAwOTlBMUI2IC8qIFdBU01PcHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTkwMUQ1OTAz
MDIwMDk5QTFCNiAvKiBXQVNNT3BzLmggKi87IH07Ci0gICAgICAgICAgICAgICAgNTNGNDBFOTMx
RDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyog
V0FTTUIzSVJHZW5lcmF0b3IuaCAqLzsgfTsKKwkJNTNGNDBFOTMxRDVBNEFCMzAwOTlBMUI2IC8q
IFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1M0Y0MEU5MjFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3Iu
aCAqLzsgfTsKIAkJNTNGNDBFOTUxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk0
MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmggKi87IH07CiAJCTUzRjQwRTk3
MUQ1QTdCRUMwMDk5QTFCNiAvKiBXQVNNTW9kdWxlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjQwRTk2MUQ1QTdCRUMwMDk5QTFCNiAv
KiBXQVNNTW9kdWxlUGFyc2VyLmNwcCAqLzsgfTsKIAkJNTNGNkJGNkQxQzNGMDYwQTAwRjQxRTVE
IC8qIEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNGNkJGNkMxQzNGMDYwQTAwRjQxRTVEIC8q
IEludGVybmFsRnVuY3Rpb25BbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMzg2LDcgKzMzODYsNyBAQAogCQk1M0Y0
MEU4QzFENTkwMUYyMDA5OUExQjYgLyogV0FTTVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXQVNNUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXQVNNQjNJUkdlbmVyYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTkwMUQ1OTAzMDIwMDk5QTFCNiAvKiBX
QVNNT3BzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01PcHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLSAgICAgICAgICAgICAgICA1M0Y0MEU5MjFENUE0QUIz
MDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV0FTTUIzSVJHZW5lcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTNGNDBFOTIxRDVBNEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01CM0lSR2VuZXJhdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUzRjQwRTk0MUQ1QTdBRUYwMDk5QTFCNiAvKiBXQVNNTW9k
dWxlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdBU01Nb2R1bGVQ
YXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNGNDBFOTYxRDVBN0JFQzAw
OTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV0FTTU1vZHVsZVBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUzRjZCRjZDMUMzRjA2MEEwMEY0MUU1RCAvKiBJbnRlcm5hbEZ1bmN0aW9uQWxsb2Nh
dGlvblByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW50ZXJuYWxG
dW5jdGlvbkFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNTIwLDYgKzM1MjAsNyBAQAogCQk3MkFBRjdDQjFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzJBQUY3Q0MxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVy
U2V0dGVyRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3
N0IyNUNCMkMzMDk0QTkyQTM4RTFEQjMgLyogSlNNb2R1bGVMb2FkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNNb2R1bGVMb2FkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzkwMTA3MzcxRDY2OTc0QzAwNTgwNDIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5qYXZhc2NyaXB0OyBwYXRoID0gTWFwSXRlcmF0b3JQcm90b3R5cGUuanM7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MDVCQjY2MUQxMjA1MEUwMDE5RkU1NyAvKiBJ
bmxpbmVBY2Nlc3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5s
aW5lQWNjZXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkwNUJCNjcxRDEy
MDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmxpbmVBY2Nlc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzkx
NjBEQkIxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3h5UmV2b2tlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU1NTgsNyArNTU1OSw3IEBACiAJCQkJNTNGNDBFOTAxRDU5MDMwMjAwOTlB
MUI2IC8qIFdBU01PcHMuaCAqLywKIAkJCQk3QkM1NDdEMjFCNjk1OTlCMDA5NTlCNTggLyogV0FT
TUZvcm1hdC5oICovLAogCQkJCTUzRjQwRThFMUQ1OTAyODIwMDk5QTFCNiAvKiBXQVNNQjNJUkdl
bmVyYXRvci5jcHAgKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUzRjQwRTky
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovLAorCQkJCTUzRjQwRTky
MUQ1QTRBQjMwMDk5QTFCNiAvKiBXQVNNQjNJUkdlbmVyYXRvci5oICovLAogCQkJCTUzRjQwRThB
MUQ1OTAxQkIwMDk5QTFCNiAvKiBXQVNNRnVuY3Rpb25QYXJzZXIuaCAqLywKIAkJCQk1M0Y0MEU5
NjFENUE3QkVDMDA5OUExQjYgLyogV0FTTU1vZHVsZVBhcnNlci5jcHAgKi8sCiAJCQkJNTNGNDBF
OTQxRDVBN0FFRjAwOTlBMUI2IC8qIFdBU01Nb2R1bGVQYXJzZXIuaCAqLywKQEAgLTcwMDQsNiAr
NzAwNSw3IEBACiAJCQkJRTMzRjUwODgxQjg0NEExQTAwNDEzODU2IC8qIEludGVybmFsUHJvbWlz
ZUNvbnN0cnVjdG9yLmpzICovLAogCQkJCTdDRjlCQzVCMUI2NUQ5QTMwMDlEQjFFRiAvKiBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQk3MDM1NTg3QzFDNDE4NDE5MDA0QkQ3QkYgLyogTWFw
UHJvdG90eXBlLmpzICovLAorCQkJCTc5MDEwNzM3MUQ2Njk3NEMwMDU4MDQyMiAvKiBNYXBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLywKIAkJCQlFMzA2Nzc5NzFCOEJDNkY1MDAzRjg3RjAgLyogTW9k
dWxlTG9hZGVyUHJvdG90eXBlLmpzICovLAogCQkJCUE1MjcwNDg2MUQwMjdDODgwMDM1NEMzNyAv
KiBOdW1iZXJDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQlBMTVERTVDNTFDMEZCRjhEMDA4OTEzM0Qg
LyogTnVtYmVyUHJvdG90eXBlLmpzICovLApAQCAtNzk0NSw3ICs3OTQ3LDcgQEAKIAkJCQkwRkI1
NDY3NzE0RjU5QjVDMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk5REEwMEIwMUJENTk5NEUwMEY0NTc1QyAvKiBsYXp5d3JpdGVyLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MzEwRTE2RjVDRDAwQjM0NDYwIC8qIExleGVyLmggaW4g
SGVhZGVycyAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNTNGNDBFOTMxRDVB
NEFCMzAwOTlBMUI2IC8qIFdBU01CM0lSR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
M0Y0MEU5MzFENUE0QUIzMDA5OUExQjYgLyogV0FTTUIzSVJHZW5lcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNTJFMEUxNkZDRTEwMEIzNDQ2MCAvKiBMZXhlci5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCURDRjNENTZCMUNEMjk0NzIwMDNENUM2NSAvKiBMYXp5Q2xhc3NTdHJ1Y3R1
cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTE4N0EwMjFCRkJFNTYxMDAzOEJCQ0Eg
LyogSklUTXVsR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHJldmlzaW9uIDIwNDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsOCArOTEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhjYXBhYmls
aXRpZXMpIFwKICAgICBtYWNybyhzdGFyRGVmYXVsdCkgXAogICAgIG1hY3JvKEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbikgXAotICAgIG1hY3JvKGdldCkgXAotICAgIG1hY3JvKHNldCkgXAogICAg
IG1hY3JvKHNoaWZ0KSBcCiAgICAgbWFjcm8oYWxsb2NhdGVUeXBlZEFycmF5KSBcCiAgICAgbWFj
cm8oSW50OEFycmF5KSBcCkBAIC0xMzQsNyArMTMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
bWFjcm8ocHJlZGljdEZpbmFsTGVuZ3RoRnJvbUFyZ3VtdW50cykgXAogICAgIG1hY3JvKHByaW50
KSBcCiAgICAgbWFjcm8oaXNTZXQpIFwKLSAgICBtYWNybyhpc01hcCkgXAogICAgIG1hY3JvKHJl
Z0V4cENyZWF0ZSkgXAogICAgIG1hY3JvKFNldEl0ZXJhdG9yKSBcCiAgICAgbWFjcm8oc2V0SXRl
cmF0b3JOZXh0KSBcCkBAIC0xNTgsNyArMTU1LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1h
Y3JvKHJlZ0V4cFRlc3RGYXN0KSBcCiAgICAgbWFjcm8oc3RyaW5nSW5jbHVkZXNJbnRlcm5hbCkg
XAogICAgIG1hY3JvKHN0cmluZ1NwbGl0RmFzdCkgXAotICAgIG1hY3JvKHN0cmluZ1N1YnN0cklu
dGVybmFsKQorICAgIG1hY3JvKHN0cmluZ1N1YnN0ckludGVybmFsKSBcCisgICAgbWFjcm8obWFw
SGVhZCkgXAorICAgIG1hY3JvKG1hcFRhaWwpIFwKKyAgICBtYWNybyhtYXBUYWJsZSkgXAorICAg
IG1hY3JvKG1hcEhhc2gpIFwKKyAgICBtYWNybyhtYXBTaXplKSBcCisgICAgbWFjcm8obWFwRGVs
ZXRlQ291bnQpIFwKKyAgICBtYWNybyhtYXBCdWNrZXQpIFwKKyAgICBtYWNybyhtYXBJdGVyYXRp
b25LaW5kKSBcCiAKIAogI2RlZmluZSBJTklUSUFMSVpFX1BSSVZBVEVfVE9fUFVCTElDX0VOVFJZ
KG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMjbmFtZSMjUHJpdmF0ZU5hbWUuaW1w
bCgpLCAmbV8jI25hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01h
cEl0ZXJhdG9yUHJvdG90eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcwkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwSXRlcmF0b3JQcm90b3R5cGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2Z1bmN0aW9uIG5leHQoKQoreworICAgIGxldCBsYXN0TWFwQnVja2V0
ID0gdGhpcy5AbWFwQnVja2V0OworICAgIGlmICghbGFzdE1hcEJ1Y2tldCkKKyAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIE1hcEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5v
bi1NYXBJdGVyYXRvciBvYmplY3QiKTsKKworICAgIGxldCBsaXN0TmV4dCA9IGxhc3RNYXBCdWNr
ZXQubGlzdE5leHQ7CisgICAgd2hpbGUgKGxpc3ROZXh0ICYmIGxpc3ROZXh0LmRlbGV0ZWQpCisg
ICAgICAgIGxpc3ROZXh0ID0gbGlzdE5leHQubGlzdE5leHQ7CisKKyAgICBpZiAobGlzdE5leHQp
IHsKKyAgICAgICAgdGhpcy5AbWFwQnVja2V0ID0gbGlzdE5leHQ7CisgICAgICAgIGlmICh0aGlz
LkBtYXBJdGVyYXRpb25LaW5kID09PSBAaXRlcmF0aW9uS2luZEtleVZhbHVlKQorICAgICAgICAg
ICAgcmV0dXJuIHtkb25lOiBmYWxzZSwgdmFsdWU6IFtsaXN0TmV4dC5rZXksIGxpc3ROZXh0LnZh
bHVlXX07CisgICAgICAgIGlmICh0aGlzLkBtYXBJdGVyYXRpb25LaW5kID09PSBAaXRlcmF0aW9u
S2luZEtleSkKKyAgICAgICAgICAgIHJldHVybiB7ZG9uZTogZmFsc2UsIHZhbHVlOiBsaXN0TmV4
dC5rZXl9OworICAgICAgICAvLyBWYWx1ZQorICAgICAgICByZXR1cm4ge2RvbmU6IGZhbHNlLCB2
YWx1ZTogbGlzdE5leHQudmFsdWV9OworICAgIH0KKyAgICByZXR1cm4ge2RvbmU6IHRydWV9Owor
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90eXBl
LmpzCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
TWFwUHJvdG90eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjgsNyBAQCBmdW5jdGlvbiBm
b3JFYWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovCiB7CiAgICAgInVzZSBzdHJpY3QiOwogCi0g
ICAgaWYgKCFAaXNNYXAodGhpcykpCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKICAgICAgICAg
dGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2Jq
ZWN0Iik7CiAKICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKQpAQCAtNDQs
MyArNDUsMjAwIEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8KICAg
ICAgICAgY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdmFsdWVbMV0sIHZhbHVlWzBdLCB0aGlzKTsK
ICAgICB9CiB9CisKK2Z1bmN0aW9uIGdldChrZXkpCit7CisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1h
cCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQgdGFibGUg
PSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4gPSB0YWJsZS5sZW5ndGg7IAorICAg
IGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkp
ICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgLy9sZXQgYWRkZXIg
PSAxOworICAgIHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgbGV0IGJ1Y2tldEtleSA9IGJ1Y2tl
dC5rZXk7CisgICAgICAgIGlmICgoYnVja2V0S2V5ID09PSBrZXkgfHwgKGJ1Y2tldEtleSAhPT0g
YnVja2V0S2V5ICYmIGtleSAhPT0ga2V5KSkgJiYgIWJ1Y2tldC5kZWxldGVkKQorICAgICAgICAg
ICAgcmV0dXJuIGJ1Y2tldC52YWx1ZTsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNr
OworICAgICAgICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioyKSAmIG1hc2s7CisgICAgICAgIGJ1
Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2FkZGVyKys7CisgICAgfQorICAgIHJldHVy
biBAdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBoYXMoa2V5KQoreworICAgICJ1c2Ugc3RyaWN0
IjsKKworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVy
cm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0
IHRhYmxlID0gdGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3Ro
OyAKKyAgICBsZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhh
c2goa2V5KSAmIG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0
IGFkZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGxldCBidWNrZXRLZXkg
PSBidWNrZXQua2V5OworICAgICAgICBpZiAoKGJ1Y2tldEtleSA9PT0ga2V5IHx8IChidWNrZXRL
ZXkgIT09IGJ1Y2tldEtleSAmJiBrZXkgIT09IGtleSkpICYmICFidWNrZXQuZGVsZXRlZCkKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioy
KSAmIG1hc2s7CisgICAgICAgIGhhc2ggPSAoaGFzaCArIDEpICYgbWFzazsKKyAgICAgICAgYnVj
a2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgIC8vYWRkZXIrKzsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitmdW5jdGlvbiBkZWxldGUoa2V5KQoreworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9y
KCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHRh
YmxlID0gdGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3RoOyAK
KyAgICBsZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhhc2go
a2V5KSAmIG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0IGFk
ZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGxldCBidWNrZXRLZXkgPSBi
dWNrZXQua2V5OworICAgICAgICBpZiAoKGJ1Y2tldC5rZXkgPT09IGtleSB8fCAoYnVja2V0S2V5
ICE9PSBidWNrZXRLZXkgJiYga2V5ICE9PSBrZXkpICYmICFidWNrZXQuZGVsZXRlZCkgeworICAg
ICAgICAgICAgYnVja2V0LmRlbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnVja2V0Lmxpc3RO
ZXh0Lmxpc3RQcmV2ID0gYnVja2V0Lmxpc3RQcmV2OworICAgICAgICAgICAgYnVja2V0Lmxpc3RQ
cmV2Lmxpc3ROZXh0ID0gYnVja2V0Lmxpc3ROZXh0OworICAgICAgICAgICAgKyt0aGlzLkBtYXBE
ZWxldGVDb3VudDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsKKyAgICAgICAgaGFzaCA9IChoYXNo
ICsgMSkgJiBtYXNrOworICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9h
ZGRlcisrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisKK30KKworQGdsb2JhbFByaXZhdGUK
K2Z1bmN0aW9uIGpzTWFwUmVoYXNoKG1hcCwgb2xkTGVuKQoreworICAgIHRoaXMuQG1hcFNpemUg
PSB0aGlzLkBtYXBTaXplIC0gdGhpcy5AbWFwRGVsZXRlQ291bnQ7CisgICAgdGhpcy5AbWFwRGVs
ZXRlQ291bnQgPSAwOworICAgIGxldCBuZXdTaXplID0gb2xkTGVuICogMjsKKyAgICBsZXQgdGFi
bGUgPSBuZXcgQEFycmF5KG5ld1NpemUpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUu
bGVuZ3RoOyBpKyspCisgICAgICAgIHRhYmxlW2ldID0gQHVuZGVmaW5lZDsKKyAgICBtYXAuQG1h
cFRhYmxlID0gdGFibGU7CisgICAgbGV0IG1hc2sgPSBuZXdTaXplIC0gMTsKKyAgICBsZXQgbm9k
ZSA9IG1hcC5AbWFwSGVhZC5saXN0TmV4dDsKKyAgICBsZXQgbmV4dE5vZGUgPSBub2RlLmxpc3RO
ZXh0OworICAgIHdoaWxlIChuZXh0Tm9kZSkgeworICAgICAgICBsZXQga2V5ID0gbm9kZS5rZXk7
CisgICAgICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkpICYgbWFzazsKKyAgICAgICAgbGV0
IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2xldCBhZGRlciA9IDE7CisgICAgICAg
IHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIp
ICYgbWFzazsKKyAgICAgICAgICAgIGhhc2ggPSAoaGFzaCArIDEpICYgbWFzazsKKyAgICAgICAg
ICAgIGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAgICAgLy9hZGRlcisrOworICAgICAg
ICB9CisKKyAgICAgICAgdGFibGVbaGFzaF0gPSBub2RlOworICAgICAgICBub2RlID0gbmV4dE5v
ZGU7CisgICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUubGlzdE5leHQ7CisgICAgfQorfQorCitm
dW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAo
IUBpc0pTTWFwKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJh
dGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKKworICAgIGxldCB0YWJsZSA9IHRoaXMu
QG1hcFRhYmxlOworICAgIGxldCB0YWJsZUxlbiA9IHRhYmxlLmxlbmd0aDsgCisgICAgbGV0IG1h
c2sgPSB0YWJsZUxlbiAtIDE7CisgICAgbGV0IGhhc2ggPSBAanNNYXBIYXNoKGtleSkgJiBtYXNr
OworICAgIGxldCBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAvL2xldCBhZGRlciA9IDE7Cisg
ICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICBsZXQgYnVja2V0S2V5ID0gYnVja2V0LmtleTsK
KyAgICAgICAgaWYgKGJ1Y2tldC5rZXkgPT09IGtleSB8fCAoYnVja2V0S2V5ICE9PSBidWNrZXRL
ZXkgJiYga2V5ICE9PSBrZXkpKSB7CisgICAgICAgICAgICBidWNrZXQudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgICAgIGJ1Y2tldC5kZWxldGVkID0gZmFsc2U7IC8vIE1heWJlIHdlIHdlcmUgZGVs
ZXRlZCBiZWZvcmUsIGJ1dCB3ZSBhcmUgbm90IGFueW1vcmUuCisgICAgICAgICAgICArK3RoaXMu
QG1hcFNpemU7CisgICAgICAgICAgICAtLXRoaXMuQG1hcERlbGV0ZUNvdW50OworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIp
ICYgbWFzazsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAgICBidWNr
ZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisrOworICAgIH0KKworICAgIGxldCBt
YXBUYWlsID0gdGhpcy5AbWFwVGFpbDsKKyAgICBsZXQgbmV3SXRlbSA9IHsKKyAgICAgICAgbGlz
dE5leHQ6IG1hcFRhaWwsCisgICAgICAgIGxpc3RQcmV2OiBtYXBUYWlsLmxpc3RQcmV2LAorICAg
ICAgICBrZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICBkZWxldGVkOiBm
YWxzZQorICAgIH07CisgICAgbWFwVGFpbC5saXN0UHJldiA9IG5ld0l0ZW07CisgICAgbmV3SXRl
bS5saXN0UHJldi5saXN0TmV4dCA9IG5ld0l0ZW07CisKKyAgICB0YWJsZVtoYXNoXSA9IG5ld0l0
ZW07CisKKyAgICBsZXQgbmV3U2l6ZSA9ICsrdGhpcy5AbWFwU2l6ZTsKKyAgICBpZiAoMiAqIG5l
d1NpemUgPiB0YWJsZUxlbikgeyAvLyBEbyBpbnQgbXVscyBhbmQgY29tcGFyZS4gVGhpcyBpcyBq
dXN0IGNoZWNraW5nIGlmIHdlJ3JlIGZpbGxlZCB1cCBtb3JlIHRoYW4gMS8yLgorICAgICAgICBA
anNNYXBSZWhhc2godGhpcywgdGFibGVMZW4pOworICAgIH0gCit9CisKK2Z1bmN0aW9uIGNsZWFy
KGtleSwgdmFsdWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0
aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVk
IG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICB0aGlzLkBtYXBUYWJsZSA9IEBuZXdBcnJheVdp
dGhTaXplKDQpOworICAgIHRoaXMuQG1hcFRhaWwubGlzdFByZXYgPSB0aGlzLkBtYXBIZWFkOwor
ICAgIHRoaXMuQG1hcEhlYWQubGlzdE5leHQgPSB0aGlzLkBtYXBUYWlsOworICAgIHRoaXMuQG1h
cFNpemUgPSAwOworICAgIHRoaXMuQG1hcERlbGV0ZUNvdW50ID0gMDsKK30KKworZnVuY3Rpb24g
bGlzdEFzQXJyYXkoKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzSlNNYXAo
dGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxl
ZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHJlc3VsdCA9IFtdOworCisgICAgbGV0
IGJ1Y2tldCA9IHRoaXMuQG1hcEhlYWQ7CisgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICBy
ZXN1bHQucHVzaCh7CisgICAgICAgICAgICBrZXk6IGJ1Y2tldC5rZXkgfHwgIkVNUFRZIiwKKyAg
ICAgICAgICAgIHZhbHVlOiBidWNrZXQudmFsdWUgfHwgIkVNUFRZIgorICAgICAgICB9KTsKKyAg
ICAgICAgYnVja2V0ID0gYnVja2V0Lmxpc3ROZXh0OworICAgIH0KKyAgICByZXR1cm4geworICAg
ICAgICB0YWJsZUxlbmd0aDogdGhpcy5AbWFwVGFibGUubGVuZ3RoLAorICAgICAgICBtYXBTaXpl
OiB0aGlzLkBtYXBTaXplLAorICAgICAgICBhcnJheTogcmVzdWx0CisgICAgfTsKK30KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
SW50cmluc2ljUmVnaXN0cnkuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksNiArNDksOCBAQCBjbGFzcyBJZGVudGlmaWVyOwogICAgIG1hY3JvKHRvTnVtYmVy
KSBcCiAgICAgbWFjcm8odG9TdHJpbmcpIFwKICAgICBtYWNybyhuZXdBcnJheVdpdGhTaXplKSBc
CisgICAgbWFjcm8oanNNYXBIYXNoKSBcCisgICAgbWFjcm8oaXNKU01hcCkgXAogCiAjZGVmaW5l
IEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUobWFjcm8p
IFwKICAgICBtYWNybyh1bmRlZmluZWQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDIwNDkyNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBj
b3B5KQpAQCAtNTcsNiArNTcsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfbnVt
YmVyIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19zdHJp
bmciLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2pzYXJy
YXkiLCAibGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2pzbWFw
IiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19vYmplY3Qi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX29iamVjdF9v
cl9udWxsIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19m
dW5jdGlvbiIsICJsZW5ndGgiIDogMyB9LApAQCAtMTQ3LDcgKzE0OCw4IEBACiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9yZXN1bWUiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX3dhdGNoZG9nIiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUiLCAibGVuZ3RoIiA6IDJ9LAot
ICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwiLCAibGVu
Z3RoIiA6IDN9CisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9sb2dfc2hhZG93X2NoaWNrZW5f
dGFpbCIsICJsZW5ndGgiIDogM30sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9qc21hcF9o
YXNoIiwgImxlbmd0aCIgOiAzIH0KICAgICAgICAgXQogICAgIH0sCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHJldmlz
aW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVz
ZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDcgQEAgdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgogICAgIGNhc2Ugb3Bf
aXNfc3RyaW5nOgogICAgIGNhc2Ugb3BfaXNfanNhcnJheToKKyAgICBjYXNlIG9wX2lzX2pzbWFw
OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251bGw6
CiAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKQEAgLTE5MCw2ICsxOTEsNyBAQCB2b2lkIGNvbXB1
dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9nZXRfcGFyZW50X3Njb3BlOgog
ICAgIGNhc2Ugb3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF9jcmVhdGVf
cmVzdDoKKyAgICBjYXNlIG9wX2pzbWFwX2hhc2g6CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9hcmd1
bWVudHM6IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdID4gMik7CiAg
ICAgICAgIGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CkBAIC00MTksNiArNDIxLDcgQEAgdm9pZCBjb21wdXRlRGVmc0Zv
ckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgogICAgIGNhc2Ug
b3BfaXNfc3RyaW5nOgogICAgIGNhc2Ugb3BfaXNfanNhcnJheToKKyAgICBjYXNlIG9wX2lzX2pz
bWFwOgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0X29yX251
bGw6CiAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKQEAgLTQ2NCw2ICs0NjcsNyBAQCB2b2lkIGNv
bXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF91bnNpZ25lZDoK
ICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czogCiAgICAgY2FzZSBvcF9jcmVhdGVfcmVz
dDoKKyAgICBjYXNlIG9wX2pzbWFwX2hhc2g6CiAgICAgY2FzZSBvcF9nZXRfcmVzdF9sZW5ndGg6
IHsKICAgICAgICAgQVNTRVJUKG9wY29kZUxlbmd0aHNbb3Bjb2RlSURdID4gMSk7CiAgICAgICAg
IGZ1bmN0b3IoY29kZUJsb2NrLCBpbnN0cnVjdGlvbiwgb3Bjb2RlSUQsIGluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTksNiArMTExOSwxNCBA
QCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgcHJpbnRVbmFyeU9w
KG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfanNhcnJheSIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9pc19qc21hcDogeworICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfanNtYXAiKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ugb3BfanNtYXBfaGFzaDogewor
ICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAianNtYXBf
aGFzaCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9p
c19vYmplY3Q6IHsKICAgICAgICAgICAgIHByaW50VW5hcnlPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImlzX29iamVjdCIpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGF0YUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgJKHJldmlzaW9uIDIwNDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDggQEAgZW51bSBEYXRhRm9ybWF0IHsKICAgICBEYXRhRm9ybWF0Qm9v
bGVhbiA9IDUsCiAgICAgRGF0YUZvcm1hdENlbGwgPSA2LAogICAgIERhdGFGb3JtYXRTdG9yYWdl
ID0gNywKLSAgICBEYXRhRm9ybWF0SlMgPSA4LAorICAgIERhdGFGb3JtYXRNYXBCdWNrZXQgPSA4
LAorICAgIERhdGFGb3JtYXRKUyA9IDE2LAogICAgIERhdGFGb3JtYXRKU0ludDMyID0gRGF0YUZv
cm1hdEpTIHwgRGF0YUZvcm1hdEludDMyLAogICAgIERhdGFGb3JtYXRKU0RvdWJsZSA9IERhdGFG
b3JtYXRKUyB8IERhdGFGb3JtYXREb3VibGUsCiAgICAgRGF0YUZvcm1hdEpTQ2VsbCA9IERhdGFG
b3JtYXRKUyB8IERhdGFGb3JtYXRDZWxsLApAQCAtNzcsNiArNzgsOCBAQCBpbmxpbmUgY29uc3Qg
Y2hhciogZGF0YUZvcm1hdFRvU3RyaW5nKERhCiAgICAgICAgIHJldHVybiAiQm9vbGVhbiI7CiAg
ICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKICAgICAgICAgcmV0dXJuICJTdG9yYWdlIjsKKyAg
ICBjYXNlIERhdGFGb3JtYXRNYXBCdWNrZXQ6CisgICAgICAgIHJldHVybiAiU3RvcmFnZSI7CiAg
ICAgY2FzZSBEYXRhRm9ybWF0SlM6CiAgICAgICAgIHJldHVybiAiSlMiOwogICAgIGNhc2UgRGF0
YUZvcm1hdEpTSW50MzI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFs
dWVSZWNvdmVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsx
NzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE5v
bmUgJiYgZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAgICBBU1NF
UlQoZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBkYXRhRm9ybWF0ICE9IERhdGFGb3Jt
YXRTdG9yYWdlICYmIGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE1hcEJ1Y2tldCk7CiAgICAgICAg
ICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBEaXNwbGFjZWRJbkpTU3RhY2s7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA0OTI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MzAsNiArNjMwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogaW5kZXgpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0pTQXJyYXkoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wKG9wX2lzX2pz
YXJyYXksIGRzdCwgc3JjKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNKU01hcChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdFVuYXJ5T3Aob3BfaXNf
anNtYXAsIGRzdCwgc3JjKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SlNNYXBIYXNoKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlPcChvcF9q
c21hcF9oYXNoLCBkc3QsIHNyYyk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzT2JqZWN0
KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBz
cmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVn
ZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Tm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjQs
NiArOTY0LDI3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1pdF8KICAg
ICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbi5nZXQoKTsKIH0KIAorUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19qc01hcEhhc2goSlNDOjpCeXRlY29kZUdl
bmVyYXRvciYgZ2VuZXJhdG9yLCBKU0M6OlJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBBcmd1bWVu
dExpc3ROb2RlKiBub2RlID0gbV9hcmdzLT5tX2xpc3ROb2RlOworICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBzaXplID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUpOworICAgIEFTU0VSVCghbm9kZS0+
bV9uZXh0KTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9uID0gZ2Vu
ZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEpTTWFwSGFz
aChmaW5hbERlc3RpbmF0aW9uLmdldCgpLCBzaXplLmdldCgpKTsKKyAgICByZXR1cm4gZmluYWxE
ZXN0aW5hdGlvbi5nZXQoKTsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2Rl
OjplbWl0X2ludHJpbnNpY19pc0pTTWFwKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRv
ciwgSlNDOjpSZWdpc3RlcklEKiBkc3QpCit7CisgICAgQXJndW1lbnRMaXN0Tm9kZSogbm9kZSA9
IG1fYXJncy0+bV9saXN0Tm9kZTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2l6ZSA9IGdlbmVy
YXRvci5lbWl0Tm9kZShub2RlKTsKKyAgICBBU1NFUlQoIW5vZGUtPm1fbmV4dCk7CisKKyAgICBS
ZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0aW5hdGlvbiA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCk7CisgICAgZ2VuZXJhdG9yLmVtaXRJc0pTTWFwKGZpbmFsRGVzdGluYXRpb24u
Z2V0KCksIHNpemUuZ2V0KCkpOworICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uLmdldCgpOwor
fQogCiAjZGVmaW5lIEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFOVF9HRU5F
UkFUT1JTKG5hbWUpIFwKICAgICBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05vZGU6OmVt
aXRfaW50cmluc2ljXyMjbmFtZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNDkyNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAzMiw2ICsxMDMyLDE3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBKU01hcEhhc2g6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXNOb25FbXB0eUpTTWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNh
c2UgSXNKU0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0xMDQyLDYgKzEwNTMsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBJc09i
amVjdE9yTnVsbDoKICAgICBjYXNlIElzRnVuY3Rpb246CiAgICAgY2FzZSBJc1JlZ0V4cE9iamVj
dDoKKyAgICBjYXNlIElzSlNNYXA6CiAgICAgY2FzZSBJc1R5cGVkQXJyYXlWaWV3OiB7CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAg
ICAgaWYgKGNoaWxkLnZhbHVlKCkpIHsKQEAgLTEwNTAsNiArMTA2Miw5IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGNhc2UgSXNKU0FycmF5
OgogICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52YWx1
ZSgpLmlzT2JqZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09IEFy
cmF5VHlwZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJc0pT
TWFwOgorICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52
YWx1ZSgpLmlzT2JqZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09
IEpTTWFwVHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJ
c1VuZGVmaW5lZDoKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4o
CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkLnZhbHVlKCkuaXNDZWxsKCkKQEAgLTEyOTEsNiAr
MTMwNiw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgSXNKU01hcDoKKyAg
ICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMjMxOSw2ICsyMzM3LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAg
Y2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzcsNiArMjUz
Nyw0MyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICBjYXNlIEpTTWFwR2V0SW50cmluc2lj
OiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKworICAgICAgICBO
b2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZz
ZXQpKTsKKyAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKEpT
TWFwSGFzaCwga2V5KTsKKyAgICAgICAgTm9kZSogbG9hZGVkQnVja2V0SW5kZXggPSBhZGRUb0dy
YXBoKEdldEpTTWFwQnVja2V0LCBtYXAsIGtleSwgaGFzaCk7CisgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgbWFwLCBsb2FkZWRCdWNrZXRJbmRl
eCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vZGF0YUxvZygiTWFwIGdldCBpbnRy
aXNuaWNcbiIpOworICAgICAgICAvL21hY3JvKEdldEpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SW50
MzIpIFwKKyAgICAgICAgLy9tYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SlMp
IFwKKyAgICAgICAgLy9tYWNybyhJc05vbkVtcHR5SlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRCb29s
ZWFuKSBcCisKKyAgICAgICAgLy9HZXRKU01hcEJ1Y2tldAorICAgICAgICAvL0xvYWRGcm9tSlNN
YXBCdWNrZXQKKyAgICAgICAgLy9Jc05vbkVtcHR5SlNNYXBCdWNrZXQKKyAgICB9CisKKyAgICBj
YXNlIEpTTWFwSGFzSW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRD
aGVja3MoKTsKKworICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUq
IGhhc2ggPSBhZGRUb0dyYXBoKEpTTWFwSGFzaCwga2V5KTsKKyAgICAgICAgTm9kZSogbG9hZGVk
QnVja2V0SW5kZXggPSBhZGRUb0dyYXBoKEdldEpTTWFwQnVja2V0LCBtYXAsIGtleSwgaGFzaCk7
CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoSXNOb25FbXB0eUpTTWFwQnVja2V0
LCBsb2FkZWRCdWNrZXRJbmRleCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0
T3BlcmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAg
CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0OCw2ICszOTg1LDE4
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX2lzX2pzYXJyYXkpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBv
cF9pc19qc21hcDogeworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3Jh
cGgoSXNKU01hcCwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2pzbWFw
KTsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfanNtYXBfaGFzaDogeworICAgICAgICAg
ICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSlNNYXBIYXNoLCB2YWx1ZSkpOwor
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfanNtYXBfaGFzaCk7CisgICAgICAgIH0KKwogICAg
ICAgICBjYXNlIG9wX2lzX29iamVjdDogewogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoSXNPYmplY3QsIHZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Miw2ICsxNDIsNyBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9w
Y29kZUlECiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19zdHJpbmc6CiAg
ICAgY2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CiAgICAgY2FzZSBv
cF9pc19vYmplY3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoKICAgICBjYXNlIG9w
X2lzX2Z1bmN0aW9uOgpAQCAtMjQ1LDYgKzI0Niw3IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmls
aXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsOgog
ICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgogICAgIGNhc2Ugb3BfcmVzb2x2ZV9zY29wZToKKyAg
ICBjYXNlIG9wX2pzbWFwX2hhc2g6CiAgICAgICAgIHJldHVybiBDYW5Db21waWxlQW5kSW5saW5l
OwogCiAgICAgY2FzZSBvcF9uZXdfcmVnZXhwOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjIsNiArMTYy
LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2Ug
Q29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ29tcGFyZUVxUHRyOgogICAgIGNhc2UgSXNKU0Fy
cmF5OgorICAgIGNhc2UgSXNKU01hcDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1Vu
ZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTE5OCw2ICsxOTksMjggQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB9CiAgICAgICAgIHJl
dHVybjsKIAorICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgRWRnZSYgbWFwRWRnZSA9IG5vZGUtPmNoaWxkMSgp
OworICAgICAgICBFZGdlJiBrZXlFZGdlID0gbm9kZS0+Y2hpbGQyKCk7CisgICAgICAgIGRlZihI
ZWFwTG9jYXRpb24oSlNNYXBCdWNrZXRJbmRleExvYywgTWlzY0ZpZWxkcywgbWFwRWRnZSwga2V5
RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAg
ICAgRWRnZSYgbWFwRWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAgICBFZGdlJiBidWNrZXRF
ZGdlID0gbm9kZS0+Y2hpbGQyKCk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSlNNYXBHZXRM
b2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGJ1Y2tldEVkZ2UpLCBMYXp5Tm9kZShub2RlKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6Cisg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oSlNNYXBI
YXNMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxkMSgpKSwgTGF6eU5vZGUobm9kZSkpOworICAg
ICAgICByZXR1cm47CisKICAgICBjYXNlIEJpdEFuZDoKICAgICBjYXNlIEJpdE9yOgogICAgIGNh
c2UgQml0WG9yOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNiArMTU3LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3Rh
bmNlT2ZDdXN0b206CiAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgY2FzZSBJc0pTTWFwOgogICAg
IGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29sZWFu
OgpAQCAtMTg1LDYgKzE4NiwxMCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6
CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CisgICAgY2FzZSBKU01hcEhhc2g6CisgICAg
Y2FzZSBHZXRKU01hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAg
Y2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBj
YXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgIGNhc2UgQ2hlY2tUaWVyVXBJbkxvb3A6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlz
aW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDAsNiArMTU0MCwyNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIElzSlNNYXA6IHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgICAg
ICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBmaXhF
ZGdlPFVudHlwZWRVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8SW50
MzJVc2U+KG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1
Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgYnJlYWs7CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhhdmUg
dGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0byBh
ZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgpA
QCAtMTYxMSw2ICsxNjMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbFdpdGhU
aGlzOgogICAgICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6CiAgICAgICAgIGNhc2UgQ29tcGFy
ZUVxUHRyOgorICAgICAgICBjYXNlIEpTTWFwSGFzaDoKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR2VuZXJhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMTQ3LDYgKzE0NywxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpbml0R1BSKG5vZGUs
IHVzZUNvdW50LCBncHIsIERhdGFGb3JtYXRTdG9yYWdlKTsKICAgICB9CisgICAgdm9pZCBpbml0
TWFwQnVja2V0KE5vZGUqIG5vZGUsIHVpbnQzMl90IHVzZUNvdW50LCBHUFJSZWcgZ3ByKQorICAg
IHsKKyAgICAgICAgaW5pdEdQUihub2RlLCB1c2VDb3VudCwgZ3ByLCBEYXRhRm9ybWF0TWFwQnVj
a2V0KTsKKyAgICB9CiAKICAgICAvLyBHZXQgdGhlIG5vZGUgdGhhdCBwcm9kdWNlZCB0aGlzIHZh
bHVlLgogICAgIE5vZGUqIG5vZGUoKSB7IHJldHVybiBtX25vZGU7IH0KQEAgLTM3Miw2ICszNzYs
MTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgZmlsbEdQUihzdHJlYW0sIGdwciwgRGF0YUZv
cm1hdFN0b3JhZ2UpOwogICAgIH0KKyAgICB2b2lkIGZpbGxNYXBCdWNrZXQoVmFyaWFibGVFdmVu
dFN0cmVhbSYgc3RyZWFtLCBHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgZmlsbEdQUihzdHJl
YW0sIGdwciwgRGF0YUZvcm1hdE1hcEJ1Y2tldCk7CisgICAgfQogCiAgICAgYm9vbCBhbGl2ZSgp
CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDE1IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBjYXNlIFJlZ0V4cE9i
amVjdExhc3RJbmRleExvYzoKICAgICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3RMYXN0SW5k
ZXhMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBCdWNrZXRJbmRleExvYzoK
KyAgICAgICAgb3V0LnByaW50KCJKU01hcEJ1Y2tldEluZGV4TG9jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEpTTWFwR2V0TG9jOgorICAgICAgICBvdXQucHJpbnQoIkpTTWFwR2V0TG9j
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTTWFwSGFzTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIkpTTWFwSGFzTG9jIik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTgs
NyArNTgsMTAgQEAgZW51bSBMb2NhdGlvbktpbmQgewogICAgIFN0cnVjdHVyZUxvYywKICAgICBU
eXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAgICBTdGFja0xvYywKLSAgICBTdGFja1BheWxvYWRM
b2MKKyAgICBTdGFja1BheWxvYWRMb2MsCisgICAgSlNNYXBCdWNrZXRJbmRleExvYywKKyAgICBK
U01hcEdldExvYywKKyAgICBKU01hcEhhc0xvYwogfTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIw
NDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzA5LDYgKzMwOSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhJbnN0YW5jZU9mQ3VzdG9tLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8oSXNKU0FycmF5LCBOb2RlUmVzdWx0Qm9v
bGVhbikgXAorICAgIG1hY3JvKElzSlNNYXAsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFj
cm8oSXNFbXB0eSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc1VuZGVmaW5lZCwg
Tm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc0Jvb2xlYW4sIE5vZGVSZXN1bHRCb29s
ZWFuKSBcCkBAIC0zODgsNyArMzg5LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKICAgICBtYWNybyhHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9y
R2VuZXJpY1BuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFj
cm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKQorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcs
IE5vZGVSZXN1bHRKUykgXAorICAgIC8qIEhhc2hpbmcgZm9yIEpTTWFwICovIFwKKyAgICBtYWNy
byhKU01hcEhhc2gsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEdldEpTTWFwQnVja2V0
LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2Rl
UmVzdWx0SlMpIFwKKyAgICBtYWNybyhJc05vbkVtcHR5SlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRC
b29sZWFuKSBcCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNhbGx5IGluY3Jl
YXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNl
cXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlk
TWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cklubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUg
IkpTTWFwLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZXBh
dGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0xNzY3LDYgKzE3NjgsMjcg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYQogICAgIHNjb3BlLT5t
ZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUodmFs
dWUpLCBzbG90KTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwSGFz
aChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGlucHV0KQoreworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OworCisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlKGpzTWFwSGFzaChleGVjLCBKU1ZhbHVl
OjpkZWNvZGUoaW5wdXQpKSk7CisgICAgaWYgKHZtLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gcmVzdWx0LmFzSW50MzIoKTsKK30KKworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
bWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXkpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSGFzaE1hcEJ1
Y2tldCoqIGJ1Y2tldCA9IGpzQ2FzdDxKU01hcCo+KG1hcCktPm1fbWFwLT5maW5kQnVja2V0KGV4
ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpKTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBK
SVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgT1NSRXhpdEJhc2UqIGV4aXQpCiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUg
dGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4n
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDkgQEAgY2hhciogSklUX09QRVJBVElPTiBv
cGVyYXRpb25FbnN1cmVBcnJheQogU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25S
ZXNvbHZlUm9wZShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogSlNTdHJpbmcqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOwog
CitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBIYXNoKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGlucHV0KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01h
cEZpbmRCdWNrZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOworCiBKU0Nl
bGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgU3RydWN0dXJlKik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9T
dHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03NDQsNiArNzQ0LDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCisgICAgICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICAgICAgc2V0UHJlZGljdGlv
bihTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRG
cm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICAvLyBGSVhNRTogdXNlIHRoZSBjYWxscyB2YWx1
ZSBwcm9maWxlciBoZXJlLgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQnl0ZWNvZGVU
b3ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVj
a2V0OgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAg
ICBicmVhazsKKwogICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6IHsKICAgICAgICAgICAgIHNl
dFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc4Nyw2
ICs3OTgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIGNh
c2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgICAgIGNh
c2UgSXNKU01hcDoKICAgICAgICAgY2FzZSBJc0VtcHR5OgogICAgICAgICBjYXNlIElzVW5kZWZp
bmVkOgogICAgICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTgwNSw2ICs4MTcsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjU3RyaW5nSWRlbnQpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDoKICAgICAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgICAgIGNhc2UgR2V0SW5kZXhlZFByb3BlcnR5U3Rv
cmFnZToKICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDQ5
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1OCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9m
Q3VzdG9tOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01hcDoKICAgICBjYXNl
IElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAg
LTM1NSw2ICszNTYsMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBz
dAogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoKICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAg
Y2FzZSBSZXNvbHZlU2NvcGU6CisgICAgY2FzZSBKU01hcEhhc2g6CisgICAgY2FzZSBHZXRKU01h
cEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05vbkVt
cHR5SlNNYXBCdWNrZXQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBCb3R0b21W
YWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzks
NyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVj
b3JkLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01h
cC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIk9i
amVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCkBAIC00Nyw2
ICs0OCw4IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiV2F0Y2hk
b2cuaCIKIAorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIgorCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQpAQCAtMTQxLDYgKzE0
NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbEpTVmFsdWUoRWRnZSAKICAgICAgICAg
CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdl
OgorICAgIGNhc2UgRGF0YUZvcm1hdE1hcEJ1Y2tldDoKICAgICBjYXNlIERhdGFGb3JtYXREb3Vi
bGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAgICAgICAgIC8vIHRoaXMgdHlwZSBjdXJy
ZW50bHkgbmV2ZXIgb2NjdXJzCkBAIC0xMDU2LDYgKzEwNjAsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnQzCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgog
ICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgor
ICAgIGNhc2UgRGF0YUZvcm1hdE1hcEJ1Y2tldDoKICAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoK
ICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoKICAgICAgICAgREZHX0NSQVNIKG1faml0
LmdyYXBoKCksIG1fY3VycmVudE5vZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKQEAgLTEyODYsNiAr
MTI5MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBj
YXNlIERhdGFGb3JtYXRCb29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBj
YXNlIERhdGFGb3JtYXRTdG9yYWdlOgorICAgIGNhc2UgRGF0YUZvcm1hdE1hcEJ1Y2tldDoKICAg
ICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKICAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoK
ICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsICJCYWQgZGF0
YSBmb3JtYXQiKTsKQEAgLTEzNjIsNiArMTM2OCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgogICAgIGNhc2UgRGF0
YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgorICAgIGNhc2UgRGF0
YUZvcm1hdE1hcEJ1Y2tldDoKICAgICBjYXNlIERhdGFGb3JtYXRJbnQ1MjoKICAgICBjYXNlIERh
dGFGb3JtYXRTdHJpY3RJbnQ1MjoKICAgICAgICAgREZHX0NSQVNIKG1faml0LmdyYXBoKCksIG1f
Y3VycmVudE5vZGUsICJCYWQgZGF0YSBmb3JtYXQiKTsKQEAgLTQ2NTEsNiArNDY1OCwxMzEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAKKyAgICBjYXNlIElzSlNNYXA6IHsKKyAgICAgICAgY29tcGlsZUlzSlNNYXAobm9k
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSlNNYXBIYXNoOiB7CisgICAg
ICAgIGNvbXBpbGVKU01hcEhhc2gobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEdldEpTTWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBu
b2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMs
IG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IG1hc2sodGhpcyk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1ZmZl
cih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1Y2tldCh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgaGFzaEdQUiA9IGhhc2gu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBtYXNrR1BSID0gbWFzay5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXgu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBidWZmZXJHUFIgPSBidWZmZXIuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBrZXlHUFIg
PSBrZXkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1h
cEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTTWFwLCBtX21hcCkpLCBidWZmZXJHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSGFzaE1hcEltcGwsIG1fY2FwYWNpdHkpKSwgbWFza0dQUik7CisgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoSGFzaE1hcEltcGwsIG1fYnVmZmVyKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1faml0
LmFkZFB0cihUcnVzdGVkSW1tMzIoSGFzaE1hcEJ1ZmZlcjo6b2Zmc2V0T2ZCdWZmZXIoKSksIGJ1
ZmZlckdQUik7CisgICAgICAgIG1faml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWFza0dQUik7
CisgICAgICAgIG1faml0Lm1vdmUoaGFzaEdQUiwgaW5kZXhHUFIpOworCisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpMYWJlbCBsb29wID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93UGF0aENhc2VzOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbG9vcEFyb3Vu
ZDsKKworICAgICAgICBtX2ppdC5hbmQzMihtYXNrR1BSLCBpbmRleEdQUik7CisgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChidWZmZXJHUFIsIGluZGV4R1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCksIGJ1Y2tldEdQUik7CisgICAgICAgIG1faml0
Lm1vdmUoYnVja2V0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIG5vdFByZXNlbnRJblRh
YmxlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAg
ICBidWNrZXRHUFIsIFRydXN0ZWRJbW1QdHIoSGFzaE1hcEltcGw6OmVtcHR5VmFsdWUoKSkpOwor
ICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCAKKyAgICAgICAgICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1w
bDo6ZGVsZXRlZFZhbHVlKCkpKSk7CisKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBCdWNrZXQsIGtl
eSkpLCBidWNrZXRHUFIpOworCisgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNr
ZXRHUFIsIGtleUdQUikpOyAvLyBUaGV5J3JlIGRlZmluaXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdl
IGZvdW5kIHRoZSBidWNrZXQgd2Ugd2VyZSBsb29raW5nIGZvciEKKyAgICAgICAgYXV0byBvbmVJ
c250Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKTsK
KyAgICAgICAgLy8gZmlyc3QgaXMgYSBjZWxsIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBw
ZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhrZXlHUFIpKSk7CisgICAgICAg
IC8vIEJvdGggYXJlIGNlbGxzIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0
LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6
OkFkZHJlc3MoYnVja2V0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZyBo
ZXJlLgorICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBp
bGVyOjpFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGtleUdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOwor
ICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcsIGJ1dCB0aGUgc2Vjb25kIGlzIG5vdCwg
d2UgY29udGludWUgdG8gbG9vcCBhcm91bmQuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1f
aml0Lmp1bXAoKSk7CisKKyAgICAgICAgb25lSXNudENlbGwubGluaygmbV9qaXQpOworICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGRvbmUgYSA2NC1iaXQgY29tcGFyZSBhdCB0aGlzIHBvaW50LCBz
byBpZiBvbmUgaXMgbm90IGEgbnVtYmVyLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVxdWFsLgor
ICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihidWNrZXRH
UFIpKTsKKyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIo
a2V5R1BSKSk7CisgICAgICAgIC8vIEJvdGggYXJlIGRlZmluaXRlbHkgbnVtYmVycy4gSWYgd2Ug
c2VlIGEgZG91YmxlLCB3ZSBnbyB0byB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzbG93UGF0aENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGJ1Y2tldEdQUikpOworICAgICAgICBz
bG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGtleUdQUikpOworICAg
ICAgICAKKyAgICAgICAgbG9vcEFyb3VuZC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmFk
ZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5qdW1wKCkubGlu
a1RvKGxvb3AsICZtX2ppdCk7CisKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7
CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgLy8g
RklYTUU6IHdlJ3ZlIGFscmVhZHkgaGFzaGVkLCBsZXRzIGp1c3QgcGFzcyBpbiBhbGwgdGhlIHN0
YXRlIHRvIHRoZSBmaW5kQnVja2V0IGZ1bmN0aW9uLgorICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUik7CisgICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAg
ICAgIG5vdFByZXNlbnRJblRhYmxlLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgbWFwQnVja2V0UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAg
ICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgZWRnZS4KKyAgICAgICAgLy9TcGVjdWxhdGVDZWxsT3Bl
cmFuZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBNYXBCdWNrZXRPcGVyYW5k
IGJ1Y2tldCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7CisKKyAgICAgICAgLy9HUFJSZWcgbWFwR1BSID0gbWFwLmdwcigpOworICAgICAg
ICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGF1dG8gbm90QnVja2V0ID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYnVja2V0R1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgT0JKRUNUX09GRlNF
VE9GKEhhc2hNYXBCdWNrZXQsIHZhbHVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RCdWNrZXQubGluaygmbV9qaXQpOworICAg
ICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
TWFwQnVja2V0T3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBi
dWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1Y2tl
dEdQUiwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MTEsNyArNDExLDcgQEAgU2lsZW50UmVnaXN0ZXJTYXZlUGxhbiBTcGVjdWxhdGl2ZUpJVDo6cwog
ICAgICAgICBBU1NFUlQoaW5mby5ncHIoKSA9PSBzb3VyY2UpOwogICAgICAgICBpZiAocmVnaXN0
ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludDMyKQogICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBT
dG9yZTMyUGF5bG9hZDsKLSAgICAgICAgZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZv
cm1hdENlbGwgfHwgcmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UpCisgICAgICAg
IGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lzdGVyRm9y
bWF0ID09IERhdGFGb3JtYXRTdG9yYWdlIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRN
YXBCdWNrZXQpCiAgICAgICAgICAgICBzcGlsbEFjdGlvbiA9IFN0b3JlUHRyOwogICAgICAgICBl
bHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0SW50NTIgfHwgcmVnaXN0ZXJGb3Jt
YXQgPT0gRGF0YUZvcm1hdFN0cmljdEludDUyKQogICAgICAgICAgICAgc3BpbGxBY3Rpb24gPSBT
dG9yZTY0OwpAQCAtNDY1LDcgKzQ2NSw3IEBAIFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3Vs
YXRpdmVKSVQ6OnMKICAgICAgICAgICAgIGZpbGxBY3Rpb24gPSBMb2FkMzJQYXlsb2FkOwogI2Vu
ZGlmCiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3Jt
YXRTdG9yYWdlKSB7CisgICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
U3RvcmFnZSB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0TWFwQnVja2V0KSB7CiAgICAg
ICAgIEFTU0VSVChpbmZvLmdwcigpID09IHNvdXJjZSk7CiAgICAgICAgIGZpbGxBY3Rpb24gPSBM
b2FkUHRyOwogICAgIH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdEludDUy
KSB7CkBAIC05NDcsNiArOTQ3LDQxIEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFN0b3Jh
Z2UoRWRnZSAKICAgICB9CiB9CiAKK0dQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbE1hcEJ1Y2tl
dChFZGdlIGVkZ2UpCit7CisgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IGVk
Z2UtPnZpcnR1YWxSZWdpc3RlcigpOworICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJh
dGlvbkluZm9Gcm9tVmlydHVhbFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3Rlcik7CisgICAgCisgICAg
c3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKKyAgICBjYXNlIERhdGFGb3JtYXROb25l
OiB7CisgICAgICAgIGRhdGFMb2coIkZvcm1hdCBub25lXG4iKTsKKyAgICAgICAgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0TWFwQnVja2V0KSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJzcGlsbCBtYXAgYnVja2V0XG4iKTsKKyAgICAgICAgICAgIEdQUlJlZyBncHIgPSBhbGxv
Y2F0ZSgpOworICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlclNwaWxsZWQpOworICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOworICAgICAgICAgICAgaW5mby5m
aWxsTWFwQnVja2V0KCptX3N0cmVhbSwgZ3ByKTsKKyAgICAgICAgICAgIHJldHVybiBncHI7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRhdGFMb2coImZpbGxpbmcgc3BlY3VsYXRlIGNl
bGxcbiIpOworICAgICAgICAvLyBNdXN0IGJlIGEgY2VsbDsgZmlsbCBpdCBhcyBhIGNlbGwgYW5k
IHRoZW4gcmV0dXJuIHRoZSBwb2ludGVyLgorICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNl
bGwoZWRnZSk7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3JtYXRNYXBCdWNrZXQ6
IHsKKyAgICAgICAgZGF0YUxvZygiYWxyZWFkeSBkYXRhZm9ybWF0bWFwYnVja2V0XG4iKTsKKyAg
ICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7
CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorICAgICAgICAKKyAgICBkZWZhdWx0OgorICAg
ICAgICBkYXRhTG9nKCJkZWZhdWx0IGNhc2VcbiIpOworICAgICAgICByZXR1cm4gZmlsbFNwZWN1
bGF0ZUNlbGwoZWRnZSk7CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGls
ZHJlbihOb2RlKiBub2RlKQogewogICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFy
Z3MpIHsKQEAgLTIwOTIsNiArMjEyNyw3IEBAIEdlbmVyYXRlZE9wZXJhbmRUeXBlIFNwZWN1bGF0
aXZlSklUOjpjaGUKIAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAg
Y2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICBjYXNlIERhdGFGb3JtYXRNYXBCdWNrZXQ6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICBjYXNlIERhdGFGb3Jt
YXRCb29sZWFuOgpAQCAtMzYxMyw2ICszNjQ5LDk1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVJc0pTQXJyYXkoTm8KICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNKU01hcChOb2RlKiBub2Rl
KQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IElzSlNNYXApOworICAgIGlmIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQu
Y29tcGFyZTgoSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAg
ICAgVHJ1c3RlZEltbTMyKEpTTWFwVHlwZSksCisgICAgICAgICAgICByZXN1bHRHUFIpOworICAg
ICAgICBibGVzc0Jvb2xlYW4ocmVzdWx0R1BSKTsKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5SZXN1
bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICBK
U1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSRmx1c2hl
ZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0g
dmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RD
ZWxsKHZhbHVlUmVncyk7CisKKyAgICBtX2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6RXF1YWws
CisgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoSlNNYXBU
eXBlKSwKKyAgICAgICAgcmVzdWx0R1BSKTsKKyAgICBibGVzc0Jvb2xlYW4ocmVzdWx0R1BSKTsK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgaXNOb3RD
ZWxsLmxpbmsoJm1faml0KTsKKyAgICBtb3ZlRmFsc2VUbyhyZXN1bHRHUFIpOworCisgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUpTTWFwSGFzaChOb2RlKiBub2Rl
KQoreworICAgIC8vIEZJWE1FOiB3ZSBhcmUgY3VycmVudGx5IHNsb3dlciBpbiB0aGUgY2FzZSB3
aGVyZSB3ZSBoYXZlIHRvIGNhbGwgaW50byBDIHRvIGhhc2ggdGhlIHN0cmluZy4KKyAgICAvLyBX
ZSBzaG91bGQgaGF2ZSBhIHN0cmluZyBhcmd1bWVudCBmYXN0IHBhdGggdGhhdCBhdm9pZHMgY2hl
Y2tzIQorCisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSlNNYXBIYXNoKTsKKworICAgIEpTVmFs
dWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVn
IGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc3RyYWlnaHRIYXNoOworICAgIGF1dG8gaXNOb3RDZWxsID0gbV9qaXQu
YnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd1BhdGg7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1w
bDo6ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQudXJzaGlmdDY0KE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIHJlc3VsdEdQUik7CisgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7
CisgICAgYXV0byBkb25lMiA9IG1faml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKCZt
X2ppdCk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihp
bnB1dEdQUikpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihK
U1ZhbHVlUmVncyhpbnB1dEdQUikpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKworICAgIHN0cmFpZ2h0SGFzaC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShpbnB1
dEdQUiwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5qc01hcEhhc2gocmVzdWx0R1BSLCB0ZW1wR1BS
KTsKKyAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZt
X2ppdCk7CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwSGFzaCwgcmVzdWx0R1BSLCBpbnB1dEdQUik7CisgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNo
ZWNrKCk7CisKKyAgICBkb25lMi5saW5rKCZtX2ppdCk7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7
CisgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA0OTI2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC05MywxNCArOTMsMTUgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgcmVnaXN0ZXIgYWxs
b2NhdG9yLgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW51bSBTcGlsbE9yZGVyIHsKLSAgICAg
ICAgU3BpbGxPcmRlckNvbnN0YW50ID0gMSwgLy8gbm8gc3BpbGwsIGFuZCBjaGVhcCBmaWxsCi0g
ICAgICAgIFNwaWxsT3JkZXJTcGlsbGVkICA9IDIsIC8vIG5vIHNwaWxsCi0gICAgICAgIFNwaWxs
T3JkZXJKUyAgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJDZWxs
ICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJTdG9yYWdlICA9IDQs
IC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICA9IDUsIC8vIG5lZWRz
IHNwaWxsIGFuZCBib3gKLSAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4gID0gNSwgLy8gbmVlZHMg
c3BpbGwgYW5kIGJveAotICAgICAgICBTcGlsbE9yZGVyRG91YmxlICAgPSA2LCAvLyBuZWVkcyBz
cGlsbCBhbmQgY29udmVydAorICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQgID0gMSwgLy8gbm8g
c3BpbGwsIGFuZCBjaGVhcCBmaWxsCisgICAgICAgIFNwaWxsT3JkZXJTcGlsbGVkICAgPSAyLCAv
LyBubyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgID0gNCwgLy8gbmVlZHMgc3Bp
bGwKKyAgICAgICAgU3BpbGxPcmRlckNlbGwgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCisgICAg
ICAgIFNwaWxsT3JkZXJTdG9yYWdlICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGls
bE9yZGVyTWFwQnVja2V0ID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlcklu
dGVnZXIgICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckJv
b2xlYW4gICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckRv
dWJsZSAgICA9IDYsIC8vIG5lZWRzIHNwaWxsIGFuZCBjb252ZXJ0CiAgICAgfTsKICNlbGlmIFVT
RShKU1ZBTFVFMzJfNjQpCiAgICAgZW51bSBTcGlsbE9yZGVyIHsKQEAgLTE0Miw2ICsxNDMsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBmaWxsSlNWYWx1ZShFZGdlLCBHUFJSZWcmLCBHUFJSZWcmLCBG
UFJSZWcmKTsKICNlbmRpZgogICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKKyAgICBHUFJS
ZWcgZmlsbE1hcEJ1Y2tldChFZGdlKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBG
UFIgcmVnaXN0ZXJzLgogICAgIHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtNTE1LDExICs1MTcs
MTIgQEAgcHVibGljOgogCiAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnJl
Z2lzdGVyRm9ybWF0KCk7CiAgICAgICAgIHN3aXRjaCAoc3BpbGxGb3JtYXQpIHsKKyAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0TWFwQnVja2V0OgogICAgICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdl
OiB7CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMg
dmFsdWUgLSBhcyBpbiBpdCdzIG5vdCB2aXNpYmxlIHRvIEpTCiAgICAgICAgICAgICAvLyBjb2Rl
LgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNw
aWxsTWUsIERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3Ry
ZWFtLCBzcGlsbE1lLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtNzU2LDYgKzc1OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJbnN0YW5j
ZU9mQ3VzdG9tKE5vZGUqKTsKIAogICAgIHZvaWQgY29tcGlsZUlzSlNBcnJheShOb2RlKik7Cisg
ICAgdm9pZCBjb21waWxlSXNKU01hcChOb2RlKik7CisgICAgdm9pZCBjb21waWxlSlNNYXBIYXNo
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc1JlZ0V4cE9iamVjdChOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlSXNUeXBlZEFycmF5VmlldyhOb2RlKik7CiAKQEAgLTkxMSw2ICs5MTYsMTYgQEAg
cHVibGljOgogICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJv
bVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBpbmZvLmluaXRTdG9y
YWdlKG5vZGUsIG5vZGUtPnJlZkNvdW50KCksIHJlZyk7CiAgICAgfQorICAgIHZvaWQgbWFwQnVj
a2V0UmVzdWx0KEdQUlJlZyByZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0g
Q2FsbFVzZUNoaWxkcmVuKQorICAgIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxk
cmVuKQorICAgICAgICAgICAgdXNlQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIAorICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7
CisgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJN
YXBCdWNrZXQpOworICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZv
RnJvbVZpcnR1YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBpbmZvLmluaXRN
YXBCdWNrZXQobm9kZSwgbm9kZS0+cmVmQ291bnQoKSwgcmVnKTsKKyAgICB9CiAgICAgdm9pZCBk
b3VibGVSZXN1bHQoRlBSUmVnIHJlZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUg
PSBDYWxsVXNlQ2hpbGRyZW4pCiAgICAgewogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hp
bGRyZW4pCkBAIC0xMTk3LDYgKzEyMTIsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVz
dWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBl
bmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAKICAgICBKSVRDb21w
aWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSVpDIG9wZXJhdGlvbiwg
R1BSUmVnIHJlZ09wMSwgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50T3AyLCBpbnQzMl90IG9wMywg
R1BSUmVnIHJlZ09wNCkKICAgICB7CkBAIC0xNjcxLDYgKzE2OTEsMTIgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBp
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJS
ZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQs
IEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyLCB1bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihh
cmcyKSwgVHJ1c3RlZEltbTMyKGFyZzMpKTsKQEAgLTI5NzYsNiArMzAwMiw1MyBAQCBwcml2YXRl
OgogICAgIEdQUlJlZyBtX2dwck9ySW52YWxpZDsKIH07CiAKK2NsYXNzIE1hcEJ1Y2tldE9wZXJh
bmQgeworcHVibGljOgorICAgIGV4cGxpY2l0IE1hcEJ1Y2tldE9wZXJhbmQoU3BlY3VsYXRpdmVK
SVQqIGppdCwgRWRnZSBlZGdlKQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX2Vk
Z2UoZWRnZSkKKyAgICAgICAgLCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG1faml0KTsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09
IFVudHlwZWRVc2UgfHwgZWRnZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAg
aWYgKGppdC0+aXNGaWxsZWQobm9kZSgpKSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KKyAg
ICAKKyAgICB+TWFwQnVja2V0T3BlcmFuZCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncHJP
ckludmFsaWQgIT0gSW52YWxpZEdQUlJlZyk7CisgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJP
ckludmFsaWQpOworICAgIH0KKyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZWRnZTsKKyAgICB9CisgICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZWRnZSgpLm5vZGUoKTsKKyAgICB9CisgICAgCisgICAg
R1BSUmVnIGdwcigpCisgICAgeworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxNYXBCdWNr
ZXQoZWRnZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHVzZSgpCisgICAgeworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7CisgICAgRWRnZSBt
X2VkZ2U7CisgICAgR1BSUmVnIG1fZ3ByT3JJbnZhbGlkOworfTsKKwogCiAvLyA9PT0gVGVtcG9y
YXJpZXMgPT09CiAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5j
bHVkZSAiRlRMQWJzdHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5j
bHVkZSAiSlNNYXAuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC0x
MDIsNyArMTAzLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNy
byhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCiAg
ICAgbWFjcm8oU3RydWN0dXJlX2dsb2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RP
ZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJv
dG90eXBlT2Zmc2V0KCkpIFwKLSAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVj
dHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkKKyAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJl
SUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTTWFwX0hh
c2hNYXBJbXBsLCBPQkpFQ1RfT0ZGU0VUT0YoSlNNYXAsIG1fbWFwKSkgXAorICAgIG1hY3JvKEhh
c2hNYXBJbXBsX2NhcGFjaXR5LCBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGwsIG1fY2FwYWNp
dHkpKSBcCisgICAgbWFjcm8oSGFzaE1hcEltcGxfYnVmZmVyLCAgT0JKRUNUX09GRlNFVE9GKEhh
c2hNYXBJbXBsLCBtX2J1ZmZlcikpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBP
QkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgdmFsdWUpKSBcCisgICAgbWFjcm8oSGFzaE1h
cEJ1Y2tldF9rZXksIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBrZXkpKQogCiAjZGVm
aW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1hY3JvKERp
cmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSwg
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODAsNiArMTgwLDExIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAK
ICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAg
ICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CisgICAgY2FzZSBKU01hcEhhc2g6
CisgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6
CisgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6CiAgICAgY2FzZSBJc0VtcHR5OgogICAg
IGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDQ5MjYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwLDYgKzcwLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNHZW5lcmF0b3JGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25t
ZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIK
ICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNU
YWJsZS5oIgpAQCAtODk4LDYgKzg5OSwyMSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElzSlNB
cnJheToKICAgICAgICAgICAgIGNvbXBpbGVJc0pTQXJyYXkoKTsKICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIElzSlNNYXA6CisgICAgICAgICAgICBjb21waWxlSXNKU01hcCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICAgICAg
Y29tcGlsZUpTTWFwSGFzaCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0
SlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0SlNNYXBCdWNrZXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAg
ICAgICBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgorICAgICAgICAgICAgY29tcGlsZUlz
Tm9uRW1wdHlKU01hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
SXNPYmplY3Q6CiAgICAgICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNjMwMSw2ICs2MzE3LDI0OSBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAor
ICAgIHZvaWQgY29tcGlsZUpTTWFwSGFzaCgpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlz
Q2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxs
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzdHJhaWdodEhhc2ggPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc051bWJlckNhc2UgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBub25FbXB0eVN0cmluZ0Nhc2UgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJl
KG5vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CisgICAgICAgIExWYWx1ZSBpc1N0cmluZyA9
IG1fb3V0LmVxdWFsKG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90
eXBlSW5mb1R5cGUpLCBtX291dC5jb25zdEludDMyKFN0cmluZ1R5cGUpKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgaXNTdHJpbmcsIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1
bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdD
YXNlLCBub25FbXB0eVN0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1f
b3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVhbChzdHJpbmdJbXBsLCBtX291dC5jb25z
dEludFB0cigwKSksIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkobm9uRW1wdHlTdHJpbmdDYXNl
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRW1wdHlTdHJpbmdDYXNlLCBub3RDZWxs
KTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBtX291dC5sU2hyKG1fb3V0LmxvYWQzMihzdHJpbmdJ
bXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwgbV9vdXQuY29uc3RJbnQzMig2
KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2gs
IG1fb3V0LmNvbnN0SW50MzIoMCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1
YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsLCBp
c051bWJlckNhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc051bWJl
cih2YWx1ZSksIHVuc3VyZShpc051bWJlckNhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNOdW1iZXJDYXNlLCBzdHJhaWdodEhhc2gpOworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0ludDMyKHZhbHVlKSwgdW5zdXJlKHN0
cmFpZ2h0SGFzaCksIHVuc3VyZShzbG93Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHN0cmFpZ2h0SGFzaCwgc2xvd0Nhc2UpOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIp
OworICAgICAgICBMVmFsdWUga2V5ID0gdmFsdWU7CisgICAgICAgIExWYWx1ZSB0ZW1wID0ga2V5
OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzIpKTsK
KyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQu
YWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAg
dGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJ
bnQzMigyMikpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAg
ICAgLy8ga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAg
dGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDEzKSk7CisgICAgICAgIHRl
bXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRl
bXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiA4KTsKKyAgICAgICAgdGVtcCA9IGtleTsK
KyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMig4KSk7Cisg
ICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0g
KGtleSA8PCAzKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNo
bCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtl
eSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICAgICAgdGVtcCA9
IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigx
NSkpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8g
a2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9
IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDI3KSk7CisgICAgICAgIHRlbXAgPSBt
X291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOwor
ICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAg
ICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKKyAgICAg
ICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmNh
c3RUb0ludDMyKGtleSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihrZXkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICB2bUNh
bGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25KU01hcEhhc2gpLCBtX2NhbGxGcmFt
ZSwgdmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRJbnQz
MihtX291dC5waGkoSW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQsIG5vbkVtcHR5U3RyaW5n
SGFzaFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEpTTWFwQnVja2V0KCkK
KyAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BBcm91bmQgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIG5vdFByZXNlbnRJblRhYmxlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgbm90RW1wdHlWYWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIG5vdERlbGV0ZWRWYWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIG5vdEJpdEVxdWFsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgYnVja2V0S2V5Tm90Q2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGJ1Y2tldEtleUlzQ2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGJvdGhBcmVDZWxscyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGJ1Y2tldEtleUlzU3RyaW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgYnVja2V0S2V5SXNOdW1iZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBib3RoQXJlTnVtYmVycyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGJ1Y2tldEtleUlzSW50MzIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1
ZSBtYXAgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUga2V5ID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBMVmFsdWUgaGFzaE1hcEltcGwgPSBt
X291dC5sb2FkUHRyKG1hcCwgbV9oZWFwcy5KU01hcF9IYXNoTWFwSW1wbCk7CisgICAgICAgIExW
YWx1ZSBidWZmZXIgPSBtX291dC5hZGQobV9vdXQubG9hZFB0cihoYXNoTWFwSW1wbCwgbV9oZWFw
cy5IYXNoTWFwSW1wbF9idWZmZXIpLCBtX291dC5jb25zdEludDY0KEhhc2hNYXBCdWZmZXI6Om9m
ZnNldE9mQnVmZmVyKCkpKTsKKyAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5zdWIobV9vdXQu
bG9hZDMyKGhhc2hNYXBJbXBsLCBtX2hlYXBzLkhhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQu
aW50MzJPbmUpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5h
bmNob3IoaGFzaCk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlW
YWx1ZSk7CisgICAgICAgIExWYWx1ZSB1bm1hc2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBp
bmRleFN0YXJ0KTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVu
bWFza2VkSW5kZXgpOworICAgICAgICBMVmFsdWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2
NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZl
ciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNv
bnN0SW50UHRyKEhhc2hNYXBJbXBsOjplbXB0eVZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3Vy
ZShub3RQcmVzZW50SW5UYWJsZSksIHVuc3VyZShub3RFbXB0eVZhbHVlKSk7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90RW1wdHlWYWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRy
KEhhc2hNYXBJbXBsOjpkZWxldGVkVmFsdWUoKSkpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BB
cm91bmQpLCB1bnN1cmUobm90RGVsZXRlZFZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm90RGVsZXRlZFZhbHVlLCBub3RCaXRFcXVhbCk7CisgICAgICAgIExWYWx1ZSBidWNrZXRL
ZXkgPSBtX291dC5sb2FkNjQoaGFzaE1hcEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0X2tl
eSk7CisgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmVxdWFsKGtleSwgYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51
YXRpb24pLCB1bnN1cmUobm90Qml0RXF1YWwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhu
b3RCaXRFcXVhbCwgYnVja2V0S2V5SXNDZWxsKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2Vs
bChidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzQ2VsbCksIHVuc3Vy
ZShidWNrZXRLZXlOb3RDZWxsKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
SXNDZWxsLCBib3RoQXJlQ2VsbHMpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGtleSks
CisgICAgICAgICAgICB1bnN1cmUoYm90aEFyZUNlbGxzKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsK
KworICAgICAgICBtX291dC5hcHBlbmRUbyhib3RoQXJlQ2VsbHMsIGJ1Y2tldEtleUlzU3RyaW5n
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGJ1Y2tldEtleSksCisgICAgICAgICAg
ICB1bnN1cmUoYnVja2V0S2V5SXNTdHJpbmcpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzU3RyaW5nLCBidWNrZXRLZXlOb3RDZWxsKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGtleSksCisgICAgICAgICAgICB1bnN1cmUo
c2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGJ1Y2tldEtleU5vdENlbGwsIGJ1Y2tldEtleUlzTnVtYmVyKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKGlzTm90TnVtYmVyKGJ1Y2tldEtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3Vu
ZCksIHVuc3VyZShidWNrZXRLZXlJc051bWJlcikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGJ1Y2tldEtleUlzTnVtYmVyLCBib3RoQXJlTnVtYmVycyk7CisgICAgICAgIG1fb3V0LmJyYW5j
aChpc05vdE51bWJlcihrZXkpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1
cmUoYm90aEFyZU51bWJlcnMpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhib3RoQXJlTnVt
YmVycywgYnVja2V0S2V5SXNJbnQzMik7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMy
KGJ1Y2tldEtleSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUoYnVja2V0
S2V5SXNJbnQzMikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzSW50MzIs
IGxvb3BBcm91bmQpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihrZXkpLAorICAg
ICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAg
ICBtX291dC5hcHBlbmRUbyhsb29wQXJvdW5kLCBzbG93UGF0aCk7CisgICAgICAgIG1fb3V0LmFk
ZEluY29taW5nVG9QaGkodW5tYXNrZWRJbmRleCwgbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRl
eCwgbV9vdXQuaW50MzJPbmUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcFN0YXJ0KTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgbm90UHJlc2VudEluVGFibGUpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwo
cG9pbnRlclR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCks
IG1fY2FsbEZyYW1lLCBtYXAsIGtleSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90UHJlc2VudEluVGFibGUsIGNvbnRpbnVh
dGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFByZXNlbnRSZXN1bHQgPSBtX291dC5h
bmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7
CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5waGkocG9pbnRlclR5cGUoKSwgYnVja2V0UmVz
dWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJlc3VsdCkpOworICAgIH0KKworICAgIHZv
aWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIG1h
cEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoMCkpLAorICAgICAgICAgICAgdW5z
dXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNrZXQpKTsKKworICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0J1Y2tldCwgY29udGludWF0aW9uKTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF92YWx1ZSkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0
LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21w
aWxlSXNOb25FbXB0eUpTTWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBidWNrZXQg
PSBsb3dNYXBCdWNrZXQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBtX291dC5ub3RFcXVhbChidWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAgICAgICAg
c2V0Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUlzSlNNYXAoKQor
ICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2Up
IHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1f
b3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAor
ICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNNYXBUeXBlKSkpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2Vs
bFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKwor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2Us
IGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291
dC5hbmNob3IobV9vdXQuZXF1YWwoCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2
YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgIG1fb3V0LmNv
bnN0SW50MzIoSlNNYXBUeXBlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVzdWx0
KSk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoKQogICAgIHsKICAg
ICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTEwMDA4LDYgKzEwMjY3LDE3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgTFZhbHVlIGxvd01hcEJ1Y2tldChFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9tYXBCdWNrZXRW
YWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVl
IHN0cmljdEludDUyVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0x
MTQwNyw2ICsxMTY3NywxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9zdG9yYWdlVmFs
dWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwogICAg
IH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBtX21hcEJ1Y2tldFZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2
YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CiAgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9k
ZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUs
IExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CkBAIC0xMTQ0MCw2ICsxMTcx
NCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVl
KTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBCdWNrZXQoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgc2V0TWFwQnVja2V0KG1fbm9kZSwgdmFsdWUpOworICAgIH0KICAgICB2b2lkIHNldERv
dWJsZShMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1
ZSk7CkBAIC0xMTYyMyw2ICsxMTkwMSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwg
TG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExv
d2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dl
cmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9tYXBCdWNrZXRWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBv
ZiBhIGhhY2suIEl0IHByZXZlbnRzIEIzIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5n
IG9mIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1
MCBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0p
OwogfQogCit2b2lkIEFzc2VtYmx5SGVscGVyczo6anNNYXBIYXNoKEdQUlJlZyBpbnB1dEFuZFJl
c3VsdCwgR1BSUmVnIHNjcmF0Y2gpCit7CisgICAgR1BSUmVnIGlucHV0ID0gaW5wdXRBbmRSZXN1
bHQ7CisgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNo
KTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChz
Y3JhdGNoKTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkg
Pj4gMjIpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVk
SW1tMzIoMjIpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8g
a2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoMTMpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsKKyAg
ICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAg
bW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMig4KSwgc2Ny
YXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSAoa2V5IDw8
IDMpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigzKSwgc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBe
PSAoa2V5ID4+IDE1KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQo
VHJ1c3RlZEltbTMyKDE1KSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOwor
ICAgIC8vIGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7Cisg
ICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDI3KSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRj
aCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDMx
KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMy
KDMxKSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworCisgICAgLy8gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkKKyAgICB2b2lkKiBtYXNrID0gYml0d2lzZV9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFVJTlRfTUFYKSk7CisgICAgYW5kNjQoVHJ1
c3RlZEltbVB0cihtYXNrKSwgaW5wdXRBbmRSZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDggQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2st
PmppdFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lIHx8IEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG1f
YmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgICAgICB9CiAgICAgfQorCisgICAg
dm9pZCBqc01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CiAg
ICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQog
ICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYzLDYgKzI2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2lzX251bWJlcikKICAgICAg
ICAgREVGSU5FX09QKG9wX2lzX3N0cmluZykKICAgICAgICAgREVGSU5FX09QKG9wX2lzX2pzYXJy
YXkpCisgICAgICAgIERFRklORV9PUChvcF9pc19qc21hcCkKICAgICAgICAgREVGSU5FX09QKG9w
X2lzX29iamVjdCkKICAgICAgICAgREVGSU5FX09QKG9wX2plcV9udWxsKQogICAgICAgICBERUZJ
TkVfT1Aob3BfamZhbHNlKQpAQCAtMzUzLDYgKzM1NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZU1haW5QYXNzKCkKICAgICAgICAgICAgIAogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3No
YWRvd19jaGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19j
aGlja2VuX3RhaWwpCisgICAgICAgIERFRklORV9PUChvcF9qc21hcF9oYXNoKQogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjUsNiAr
NTI1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pc19udW1iZXIo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2lzX3N0cmluZyhJbnN0cnVjdGlv
biopOwogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfanNhcnJheShJbnN0cnVjdGlvbiopOworICAg
ICAgICB2b2lkIGVtaXRfb3BfaXNfanNtYXAoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfamVx
X251bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pmYWxzZShJbnN0cnVj
dGlvbiopOwpAQCAtNjA3LDYgKzYwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRfb3BfdG9faW5kZXhfc3RyaW5nKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKEluc3RydWN0aW9uKik7CisgICAg
ICAgIHZvaWQgZW1pdF9vcF9qc21hcF9oYXNoKEluc3RydWN0aW9uKik7CiAKICAgICAgICAgdm9p
ZCBlbWl0U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYml0YW5kKEluc3RydWN0aW9uKiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiAr
Mjc4LDYxIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2pzYXJyYXkoSW5zdHJ1Y3Rpb24KICAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2lzX2pz
bWFwKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVn
VDApOworCisgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUlu
Zm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNNYXBUeXBlKSwgcmVnVDApOworICAgIGVt
aXRUYWdCb29sKHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc05vdENl
bGwubGluayh0aGlzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVnVDAp
OworCisgICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfanNtYXBfaGFzaChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisKKyAgICBKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDApOworICAgIEp1bXAgaXNOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2Vs
bChyZWdUMCk7CisgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVu
ZChicmFuY2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QwLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVnVDApOworICAgIHNsb3dQYXRo
LmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgdXJzaGlmdDMy
KFRydXN0ZWRJbW0zMig2KSwgcmVnVDApOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0
MzIoWmVybywgcmVnVDApKTsKKyAgICBhdXRvIGp1bXBUb0JveGluZyA9IGp1bXAoKTsKKworICAg
IGlzTm90Q2VsbC5saW5rKHRoaXMpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoYnJhbmNoSWZO
b3ROdW1iZXIocmVnVDApKTsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKGJyYW5jaElmSW50MzIo
SlNWYWx1ZVJlZ3MocmVnVDApKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisKKyAg
ICBzdHJhaWdodEhhc2gubGluayh0aGlzKTsKKworICAgIGpzTWFwSGFzaChyZWdUMCwgcmVnVDEp
OworICAgIGp1bXBUb0JveGluZy5saW5rKHRoaXMpOworICAgIGJveEludDMyKHJlZ1QwLCBKU1Zh
bHVlUmVncyhyZWdUMCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBK
dW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKHRoaXMpOworICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfanNtYXBfaGFzaCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBkb25lLmxpbmso
dGhpcyk7Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNiArMTk0LDcgQEAgdHlwZWRlZiBKU0Nl
bGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZQogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFU
SU9OICpDX0pJVE9wZXJhdGlvbl9FU3RaWikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJf
dCwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0
aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJB
VElPTiAqQ19KSVRPcGVyYXRpb25fRUpzY0kpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBVbmlxdWVk
U3RyaW5nSW1wbCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJh
dGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYg
ZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRl
ZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0cpKEpTR2xvYmFsT2JqZWN0
Kik7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fREQpKGRv
dWJsZSwgZG91YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERh
dGEuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw3IEBAIHZvaWQgRGF0
YTo6cGVyZm9ybUFzc2VydGlvbnMoVk0mIHZtKQogICAgIFNUQVRJQ19BU1NFUlQoRmluYWxPYmpl
Y3RUeXBlID09IDIxKTsKICAgICBTVEFUSUNfQVNTRVJUKEpTRnVuY3Rpb25UeXBlID09IDIzKTsK
ICAgICBTVEFUSUNfQVNTRVJUKEFycmF5VHlwZSA9PSAyOSk7CisgICAgU1RBVElDX0FTU0VSVChK
U01hcFR5cGUgPT0gMTE3KTsKICAgICBTVEFUSUNfQVNTRVJUKEludDhBcnJheVR5cGUgPT0gMTAw
KTsKICAgICBTVEFUSUNfQVNTRVJUKEludDE2QXJyYXlUeXBlID09IDEwMSk7CiAgICAgU1RBVElD
X0FTU0VSVChJbnQzMkFycmF5VHlwZSA9PSAxMDIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDQ5MjYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDkwLDcgKzE0OTAsNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
ZGVidWcpCiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBpbnQgZGVidWdIb29rSUQgPSBwY1sxXS51
Lm9wZXJhbmQ7CiAgICAgdm0uaW50ZXJwcmV0ZXItPmRlYnVnKGV4ZWMsIHN0YXRpY19jYXN0PERl
YnVnSG9va0lEPihkZWJ1Z0hvb2tJRCkpOwotICAgIAogICAgIExMSU5UX0VORCgpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRl
cnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTExOTks
MjAgKzExOTksMTA4IEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiAgICAgc3RvcmVxIFZhbHVlRmFs
c2UsIFtjZnIsIHQyLCA4XQogICAgIGRpc3BhdGNoKDMpCiAKLQotX2xsaW50X29wX2lzX2pzYXJy
YXk6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQorbWFjcm8gZW1pdElzQ2VydGFpbkpTVHlwZSh0eXBl
KQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMSwgdDIpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDApCi0gICAgYnRx
bnogdDAsIHRhZ01hc2ssIC5vcElzSlNBcnJheU5vdENlbGwKLSAgICBjYmVxIEpTQ2VsbDo6bV90
eXBlW3QwXSwgQXJyYXlUeXBlLCB0MQorICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAuanNUeXBlTm90
Q2VsbAorICAgIGNiZXEgSlNDZWxsOjptX3R5cGVbdDBdLCB0eXBlLCB0MQogICAgIG9ycSBWYWx1
ZUZhbHNlLCB0MQogICAgIHN0b3JlcSB0MSwgW2NmciwgdDIsIDhdCiAgICAgZGlzcGF0Y2goMykK
LS5vcElzSlNBcnJheU5vdENlbGw6CisuanNUeXBlTm90Q2VsbDoKICAgICBzdG9yZXEgVmFsdWVG
YWxzZSwgW2NmciwgdDIsIDhdCiAgICAgZGlzcGF0Y2goMykKK2VuZAorCitfbGxpbnRfb3BfaXNf
anNhcnJheToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgZW1pdElzQ2VydGFpbkpTVHlwZShB
cnJheVR5cGUpCisKKworX2xsaW50X29wX2lzX2pzbWFwOgorICAgIHRyYWNlRXhlY3V0aW9uKCkK
KyAgICBlbWl0SXNDZXJ0YWluSlNUeXBlKEpTTWFwVHlwZSkKKworX2xsaW50X29wX2pzbWFwX2hh
c2g6CisgICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0
MSkKKyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MCkKKyAgICBidHFueiB0MCwgdGFn
TWFzaywgLmpzTWFwSGFzaE5vdENlbGwKKyAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIFN0
cmluZ1R5cGUsIC5zdHJhaWdodEhhc2gKKyAgICBsb2FkcCBKU1N0cmluZzo6bV92YWx1ZVt0MF0s
IHQwCisgICAgYnRweiB0MCwgLnNsb3dQYXRoCisgICAgbG9hZGkgU3RyaW5nSW1wbDo6bV9oYXNo
QW5kRmxhZ3NbdDBdLCB0MAorICAgIHVyc2hpZnRpIDYsIHQwICMgRklYTUUgc3RhdGljIGFzc2Vy
dCA2IGZvciBzX2ZsYWdDb3VudCBvZiBTdHJpbmdJbXBsIQorICAgIGJ0aXogdDAsIC5zbG93UGF0
aAorICAgIGptcCAuYm94VXBSZXN1bHQKKyAgICAgCisuc2xvd1BhdGg6CisgICAgY2FsbE9wY29k
ZVNsb3dQYXRoKF9zbG93X3BhdGhfanNtYXBfaGFzaCkKKyAgICBkaXNwYXRjaCgzKQorLmpzTWFw
SGFzaE5vdENlbGw6CisgICAgYnFiIHQwLCB0YWdUeXBlTnVtYmVyLCAub3AxTm90SW50CisgICAg
am1wIC5zdHJhaWdodEhhc2gKKy5vcDFOb3RJbnQ6CisgICAgYnRxeiB0MCwgdGFnVHlwZU51bWJl
ciwgLnN0cmFpZ2h0SGFzaAorICAgICMgRklYTUUgbWFrZSBkb3VibGUgY2FzZSBmYXN0CisgICAg
Y2FsbE9wY29kZVNsb3dQYXRoKF9zbG93X3BhdGhfanNtYXBfaGFzaCkKKyAgICBkaXNwYXRjaCgz
KQorLnN0cmFpZ2h0SGFzaDoKKyAgICBtb3ZlIHQwLCB0MQorIyBrZXkgKz0gfihrZXkgPDwgMzIp
OworICAgIGxzaGlmdHAgMzIsIHQxCisgICAgbm90cSB0MQorICAgIGFkZHEgdDEsIHQwCisjIGtl
eSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDIyLCB0MQor
ICAgIHhvcnEgdDEsIHQwCisjIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZSB0MCwgdDEK
KyAgICBsc2hpZnRwIDEzLCB0MQorICAgIG5vdHEgdDEKKyAgICBhZGRxIHQxLCB0MAorIyBrZXkg
Xj0gKGtleSA+PiA4KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDgsIHQxCisgICAg
eG9ycSB0MSwgdDAKKyMga2V5ICs9IChrZXkgPDwgMyk7CisgICAgbW92ZSB0MCwgdDEKKyAgICBs
c2hpZnRwIDMsIHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChrZXkgPj4gMTUpOworICAg
IG1vdmUgdDAsIHQxCisgICAgdXJzaGlmdHAgMTUsIHQxCisgICAgeG9ycSB0MSwgdDAKKyMga2V5
ICs9IH4oa2V5IDw8IDI3KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIGxzaGlmdHAgMjcsIHQxCisg
ICAgbm90cSB0MQorICAgIGFkZHEgdDEsIHQwCisjIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICBt
b3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDMxLCB0MQorICAgIHhvcnEgdDEsIHQwCisuYm94VXBS
ZXN1bHQ6CisgICAgYW5kcSA0Mjk0OTY3Mjk1LCB0MCAjIHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
ZXN1bHQpCisgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCisgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDEsIHQyKQorICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCisgICAgZGlzcGF0Y2goMykK
KworCisjICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKKyMgICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDEsIHQyKQorIyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MCkKKyMg
ICAgYnRxbnogdDAsIHRhZ01hc2ssIC5vcElzSlNBcnJheU5vdENlbGwKKyMgICAgY2JlcSBKU0Nl
bGw6Om1fdHlwZVt0MF0sIEFycmF5VHlwZSwgdDEKKyMgICAgb3JxIFZhbHVlRmFsc2UsIHQxCisj
ICAgIHN0b3JlcSB0MSwgW2NmciwgdDIsIDhdCisjICAgIGRpc3BhdGNoKDMpCisjLm9wSXNKU0Fy
cmF5Tm90Q2VsbDoKKyMgICAgc3RvcmVxIFZhbHVlRmFsc2UsIFtjZnIsIHQyLCA4XQorIyAgICBk
aXNwYXRjaCgzKQogCiAKIF9sbGludF9vcF9pc19vYmplY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lv
biAyMDQ5MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw2ICszNDcsNyBAQCBjb25zdCBPYmplY3RU
eXBlID0gMjAKIGNvbnN0IEZpbmFsT2JqZWN0VHlwZSA9IDIxCiBjb25zdCBKU0Z1bmN0aW9uVHlw
ZSA9IDIzCiBjb25zdCBBcnJheVR5cGUgPSAyOQorY29uc3QgSlNNYXBUeXBlID0gMTE3CiAKICMg
VGhlIHR5cGVkIGFycmF5IHR5cGVzIG5lZWQgdG8gYmUgbnVtYmVyZWQgaW4gYSBwYXJ0aWN1bGFy
IG9yZGVyIGJlY2F1c2Ugb2YgdGhlIG1hbnVhbGx5IHdyaXR0ZW4KICMgc3dpdGNoIHN0YXRlbWVu
dCBpbiBnZXRfYnlfdmFsIGFuZCBwdXRfYnlfdmFsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkocmV2aXNpb24gMjA0OTI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIE1BQ1JPX0lOU1RSVUNUSU9OUyA9CiAgICAgICJu
ZWdwIiwKICAgICAgIm5lZ3EiLAogICAgICAibm90aSIsCisgICAgICJub3RxIiwKICAgICAgIm9y
aSIsCiAgICAgICJyc2hpZnRpIiwKICAgICAgInVyc2hpZnRpIiwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtOTAxLDYg
KzkwMSw4IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgICAgICAkYXNtLnB1dHMgIm5lZyN7
eDg2U3VmZml4KDpxdWFkKX0gI3t4ODZPcGVyYW5kcyg6cXVhZCl9IgogICAgICAgICB3aGVuICJu
b3RpIgogICAgICAgICAgICAgJGFzbS5wdXRzICJub3Qje3g4NlN1ZmZpeCg6aW50KX0gI3t4ODZP
cGVyYW5kcyg6aW50KX0iCisgICAgICAgIHdoZW4gIm5vdHEiCisgICAgICAgICAgICAkYXNtLnB1
dHMgIm5vdCN7eDg2U3VmZml4KDpxdWFkKX0gI3t4ODZPcGVyYW5kcyg6cXVhZCl9IgogICAgICAg
ICB3aGVuICJvcmkiCiAgICAgICAgICAgICBoYW5kbGVYODZPcCgib3Ije3g4NlN1ZmZpeCg6aW50
KX0iLCA6aW50KQogICAgICAgICB3aGVuICJvcnAiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNDkyNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0xleGljYWxF
bnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5h
bWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1dpdGhT
Y29wZS5oIgpAQCAtOTMzLDQgKzkzNCwxMSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0
X2J5X3ZhbF93aXRoCiAgICAgRU5EKCk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9q
c21hcF9oYXNoKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSB2YWx1ZVRvSGFzaCA9IE9Q
X0MoMikuanNWYWx1ZSgpOworICAgIFJFVFVSTihKU1ZhbHVlKGpzTWFwSGFzaChleGVjLCB2YWx1
ZVRvSGFzaCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjA0OTI2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1OCw2ICsyNTgsNyBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2dldF9ieV9pCiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9ieV92
YWxfd2l0aF90aGlzKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X2J5X2lk
X3dpdGhfdGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YWxf
d2l0aF90aGlzKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfanNtYXBfaGFzaCk7
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRyaW5zaWMuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAg
ZW51bSBKU19FWFBPUlRfUFJJVkFURSBJbnRyaW5zaWMgewogICAgIElzUmVnRXhwT2JqZWN0SW50
cmluc2ljLAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRUaGlzTm9B
cmdzRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAgIEpTTWFwR2V0SW50cmluc2ljLAorICAgIEpT
TWFwSGFzSW50cmluc2ljLAogCiAgICAgLy8gR2V0dGVyIGludHJpbnNpY3MuCiAgICAgVHlwZWRB
cnJheUxlbmd0aEludHJpbnNpYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzI1LDcgKzcyNSw2IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9w
ZXIKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmlzU2V0UHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAx
LCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc1NldCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLlNldEl0ZXJhdG9yUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRl
KHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNTZXRJdGVyYXRvciksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnNldEl0ZXJhdG9yTmV4dFByaXZhdGVOYW1l
KCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwgU3RyaW5nKCksIHByaXZhdGVGdW5j
U2V0SXRlcmF0b3JOZXh0KSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAotICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCku
aXNNYXBQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIFN0cmlu
ZygpLCBwcml2YXRlRnVuY0lzTWFwKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
LAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuaXNBcnJheVByaXZhdGVOYW1lKCksIGFycmF5Q29uc3RydWN0b3ItPmdldERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+aXNBcnJheSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1
aWx0aW5OYW1lcygpLmlzQXJyYXlDb25zdHJ1Y3RvclByaXZhdGVOYW1lKCksIHByaXZhdGVGdW5j
SXNBcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5jb25jYXRNZW1jcHlQcml2YXRlTmFtZSgpLCBwcml2YXRlRnVuY0NvbmNhdE1lbWNweSwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNyArMjYsNTcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01hcC5oIgogCisjaW5jbHVkZSAi
QnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKICNpbmNsdWRl
ICJDb3BpZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNBcnJheS5oIgogI2lu
Y2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAor
Y29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ6OnNfaW5mbyA9IHsgIkhhc2hNYXBCdWNrZXQi
LCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQpIH07
CisKK3ZvaWQgSGFzaE1hcEJ1Y2tldDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIEhhc2hNYXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nh
c3Q8SGFzaE1hcEJ1Y2tldCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmV4dCk7Cisg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJldik7CisgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPmtleSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPnZh
bHVlKTsKK30KKworY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWZmZXI6OnNfaW5mbyA9IHsgIkhh
c2hNYXBCdWZmZXIiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hN
YXBCdWZmZXIpIH07CisKK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwSW1wbDo6c19pbmZvID0geyAi
SGFzaE1hcEltcGwiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hN
YXBJbXBsKSB9OworCit2b2lkIEhhc2hNYXBJbXBsOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2hlYWQp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhaWwpOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2J1ZmZlcik7Cit9CisKIGNvbnN0IENsYXNzSW5mbyBKU01h
cDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU01hcCkgfTsKIAordm9pZCBKU01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCopCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fbWFwLnNl
dCh2bSwgdGhpcywgSGFzaE1hcEltcGw6OmNyZWF0ZSh2bSkpOworfQorCiB2b2lkIEpTTWFwOjpk
ZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBKU01hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U01hcCo+KGNlbGwpOwpAQCAtNTMsNyArOTMsMTAgQEAgc2l6ZV90IEpTTWFwOjplc3RpbWF0ZWRT
aXplKEpTQ2VsbCogY2VsbAogdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwg
dmlzaXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOworICAgIC8vanNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0
YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworCisgICAgSlNNYXAqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9tYXApOwogfQogCiB2b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwg
Q29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKQEAgLTYyLDI3ICsxMDUsMjUg
QEAgdm9pZCBKU01hcDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbAogICAgIGpzQ2FzdDxK
U01hcCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7
CiB9CiAKLWJvb2wgSlNNYXA6OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorc2l6
ZV90IEpTTWFwOjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICByZXR1cm4gbV9tYXBEYXRh
LmNvbnRhaW5zKGV4ZWMsIGtleSk7CisgICAgcmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4ZWMpOwog
fQogCi1zaXplX3QgSlNNYXA6OnNpemUoRXhlY1N0YXRlKiBleGVjKQorLyoKK2Jvb2wgSlNNYXA6
OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogewotICAgIHJldHVybiBtX21hcERh
dGEuc2l6ZShleGVjKTsKKyAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7
CiB9CiAKIEpTVmFsdWUgSlNNYXA6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQog
ewotICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9tYXBEYXRhLmdldChleGVjLCBrZXkpOwotICAgIGlm
ICghcmVzdWx0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIHJldHVybiBtX21hcC5nZXQoZXhlYywga2V5KTsKIH0KIAogdm9pZCBKU01hcDo6
c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAg
bV9tYXBEYXRhLnNldChleGVjLCB0aGlzLCBrZXksIHZhbHVlKTsKKyAgICBtX21hcC5zZXQoZXhl
YywgdGhpcywga2V5LCB2YWx1ZSk7CiB9CiAKIHZvaWQgSlNNYXA6OmNsZWFyKEV4ZWNTdGF0ZSop
CkBAIC05NCw1ICsxMzUsNiBAQCBib29sIEpTTWFwOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhCiB7CiAgICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywga2V5KTsKIH0KKyovCiAK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkocmV2aXNpb24gMjA0
OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsMzQ1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIYXNo
TWFwQnVja2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOworCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0KiBjcmVhdGUoVk0m
IHZtKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEJ1Y2tldD4odm0uaGVhcCkpIEhhc2hNYXBCdWNrZXQodm0s
IHZtLmhhc2hNYXBCdWNrZXRTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBidWNrZXQtPmZpbmlz
aENyZWF0aW9uKHZtKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWJ1Y2tldC0+bmV4dCgpKTsK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWJ1Y2tldC0+cHJldigpKTsKKyAgICAgICAgcmV0dXJu
IGJ1Y2tldDsKKyAgICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgSGFzaE1h
cEJ1Y2tldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSkKKyAgICB7IH0KKworICAgIHZvaWQgc2V0TmV4dChWTSYgdm0sIEhhc2hNYXBC
dWNrZXQqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIG1fbmV4dC5zZXQodm0sIHRoaXMsIGJ1Y2tl
dCk7CisgICAgfQorICAgIHZvaWQgc2V0UHJldihWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tl
dCkKKyAgICB7CisgICAgICAgIG1fcHJldi5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CisgICAgfQor
CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
CisgICAgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsg
fQorICAgIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7
IH0KKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX25leHQ7CisgICAgV3JpdGVC
YXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1fcHJldjsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
a2V5OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiB2YWx1ZTsKKyAgICBib29sIGRlbGV0ZWQg
eyBmYWxzZSB9OworfTsKKworY2xhc3MgSGFzaE1hcEJ1ZmZlciA6IHB1YmxpYyBKU05vbkZpbmFs
T2JqZWN0IHsKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKworICAgIHN0YXRp
YyBzaXplX3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAg
ICByZXR1cm4gb2Zmc2V0T2ZCdWZmZXIoKSArIGNhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNr
ZXQqKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAg
c3RhdGljIHNpemVfdCBvZmZzZXRPZkJ1ZmZlcigpCisgICAgeworICAgICAgICBzaXplX3Qgc2l6
ZSA9IHNpemVvZihIYXNoTWFwQnVmZmVyKTsKKyAgICAgICAgc2l6ZSA9IFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjxzaXplb2YoSGFzaE1hcEJ1Y2tldCopPihzaXplKTsKKyAgICAgICAgcmV0dXJu
IHNpemU7CisgICAgfQorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwor
ICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXQqKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0Kio+KGJpdHdpc2VfY2FzdDxjaGFy
Kj4odGhpcykgKyBvZmZzZXRPZkJ1ZmZlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1h
cEJ1ZmZlciogY3JlYXRlKFZNJiB2bSwgdWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAg
ICBIYXNoTWFwQnVmZmVyKiBidWZmZXIgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNo
TWFwQnVmZmVyPih2bS5oZWFwLCBhbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSkpKSBIYXNoTWFwQnVm
ZmVyKHZtLCB2bS5oYXNoTWFwQnVmZmVyU3RydWN0dXJlLmdldCgpLCBjYXBhY2l0eSk7CisgICAg
ICAgIGJ1ZmZlci0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4gYnVmZmVyOwor
ICAgIH0KKworICAgIEhhc2hNYXBCdWZmZXIoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
dWludDMyX3QgY2FwYWNpdHkpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsK
KyAgICAgICAgbWVtc2V0KGJ1ZmZlcigpLCAtMSwgY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1
Y2tldCopKTsKKyAgICB9Cit9OworCisKKy8vIEZJWE1FOiBtYWtlIHRoaXMgQUxXQVlTX0lOTElO
RSBpbnNpZGUgUHJvcGVydHlEZXNjcmlwdG9yCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIHNh
bWVWYWx1ZU1hcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAg
IGlmIChhID09IGIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghYS5pc051bWJlcigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7CisgICAg
aWYgKCFiLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUgeCA9
IGEuYXNOdW1iZXIoKTsKKyAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKKyAgICBib29sIHhJ
c05hTiA9IHN0ZDo6aXNuYW4oeCk7CisgICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkpOwor
ICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQorICAgICAgICByZXR1cm4geElzTmFOICYmIHlJc05h
TjsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHkpOworfQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkp
IHsKKyAgICAgICAgZG91YmxlIGQgPSB2YWx1ZS5hc0RvdWJsZSgpOworICAgICAgICBpZiAoIXN0
ZDo6aXNuYW4oZCkpIHsKKyAgICAgICAgICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsK
KyAgICAgICAgICAgIGlmIChpID09IGQpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBqc051bWJl
cihpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgeworICAg
ICAgICAvL3N0YXRpYyBkb3VibGUgc2xvd0Nhc2VzID0gMC4wOworICAgICAgICAvL3N0YXRpYyBk
b3VibGUgaGFzSGFzaCA9IDAuMDsKKyAgICAgICAgLy9kYXRhTG9nKCJqc01hcEhhc2ggc2xvdyBw
YXRoIHN0cmluZyFcbiIpOworICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcodmFs
dWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIHd0ZlN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhl
Yyk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKKyAgICAgICAgLy9zbG93Q2FzZXMrKzsKKyAgICAgICAgLy9pZiAod3RmU3Ry
aW5nLmltcGwoKS0+aGFzSGFzaCgpKQorICAgICAgICAvLyAgICBoYXNIYXNoKys7CisgICAgICAg
IC8vZGF0YUxvZygiUGVyY2VudCBoYXNoIiwgaGFzSGFzaC9zbG93Q2FzZXMsICJcbiIpOworICAg
ICAgICByZXR1cm4gd3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0KKyAgICB1aW50NjRf
dCByYXdWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgcmV0dXJuIFdURjo6aW50
SGFzaChyYXdWYWx1ZSk7Cit9CisKKworY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisKK3B1Ymxp
YzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwSW1wbCogY3JlYXRlKFZN
JiB2bSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBJbXBsKiBpbXBsID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXApKSBIYXNoTWFwSW1wbCh2bSwgdm0uaGFz
aE1hcEltcGxTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBpbXBsLT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIEhhc2hNYXBJbXBsKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAgICAsIG1fZGVsZXRlQ291bnQoMCkKKyAgICAgICAg
LCBtX2NhcGFjaXR5KDQpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVm
ZmVyOjpjcmVhdGUodm0sIG1fY2FwYWNpdHkpKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyBp
KyspCisgICAgICAgICAgICAgICAgQVNTRVJUKGlzRW1wdHkobV9idWZmZXItPmJ1ZmZlcigpW2ld
KSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogc29tZSBraW5kIG9mIHdyaXRlIGJh
cnJpZXIgb24gb3VyIG93bmVyPworICAgICAgICBtX2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNoTWFw
QnVja2V0OjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwgdGhpcywgSGFzaE1h
cEJ1Y2tldDo6Y3JlYXRlKHZtKSk7CisKKyAgICAgICAgbV9oZWFkLT5zZXROZXh0KHZtLCBtX3Rh
aWwuZ2V0KCkpOworICAgICAgICBtX3RhaWwtPnNldFByZXYodm0sIG1faGVhZC5nZXQoKSk7Cisg
ICAgICAgIG1faGVhZC0+ZGVsZXRlZCA9IHRydWU7CisgICAgICAgIG1fdGFpbC0+ZGVsZXRlZCA9
IHRydWU7CisKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldCogZW1wdHlWYWx1ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBCdWNrZXQqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KC0xKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc0VtcHR5KEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBidWNrZXQgPT0gZW1wdHlWYWx1ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFw
QnVja2V0KiBkZWxldGVkVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxIYXNoTWFwQnVja2V0Kj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigtMykpOworICAgIH0KKwor
ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEZWxldGVkKEhhc2hNYXBCdWNrZXQqIGJ1
Y2tldCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNrZXQgPT0gZGVsZXRlZFZhbHVlKCk7Cisg
ICAgfQorCisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqKiBmaW5kQnVja2V0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBjb25zdCB1aW50MzJf
dCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0ganNNYXBI
YXNoKGV4ZWMsIGtleSkgJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0KiogYnVmZmVyID0g
bV9idWZmZXItPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBidWZm
ZXJbaW5kZXhdOworCisgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAg
ICAgICBpZiAoIWlzRGVsZXRlZChidWNrZXQpICYmIHNhbWVWYWx1ZU1hcChleGVjLCBrZXksIGJ1
Y2tldC0+a2V5LmdldCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7
CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1
Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgaWYgKEhhc2hNYXBCdWNrZXQqKiBidWNrZXQg
PSBmaW5kQnVja2V0KGV4ZWMsIGtleSkpCisgICAgICAgICAgICByZXR1cm4gKCpidWNrZXQpLT52
YWx1ZS5nZXQoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuICEhZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAg
ICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywga2V5KSAmIG1hc2s7CisgICAg
ICAgIEhhc2hNYXBCdWNrZXQqKiBidWZmZXIgPSBtX2J1ZmZlci0+YnVmZmVyKCk7CisgICAgICAg
IEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIHdoaWxlICgh
aXNFbXB0eShidWNrZXQpICYmICFpc0RlbGV0ZWQoYnVja2V0KSkgeworICAgICAgICAgICAgaWYg
KHNhbWVWYWx1ZU1hcChleGVjLCBrZXksIGJ1Y2tldC0+a2V5LmdldCgpKSkgeworICAgICAgICAg
ICAgICAgIGJ1Y2tldC0+dmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsg
MSkgJiBtYXNrOworICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAg
fQorCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIG5ld0VudHJ5ID0gbV90YWlsLmdldCgpOworICAg
ICAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgICAgIG5ld0VudHJ5LT5rZXkuc2V0
KHZtLCBvd25lciwga2V5KTsKKyAgICAgICAgbmV3RW50cnktPnZhbHVlLnNldCh2bSwgb3duZXIs
IHZhbHVlKTsKKyAgICAgICAgbmV3RW50cnktPmRlbGV0ZWQgPSBmYWxzZTsKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldCogbmV3VGFpbCA9IEhhc2hNYXBCdWNrZXQ6OmNyZWF0ZSh2bSk7CisgICAgICAg
IG1fdGFpbC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOworICAgICAgICBuZXdUYWlsLT5zZXRQcmV2
KHZtLCBuZXdFbnRyeSk7CisgICAgICAgIG5ld1RhaWwtPmRlbGV0ZWQgPSB0cnVlOworICAgICAg
ICBuZXdFbnRyeS0+c2V0TmV4dCh2bSwgbmV3VGFpbCk7CisgICAgICAgIHVpbnQzMl90IG5ld1Np
emUgPSArK21fc2l6ZTsKKyAgICAgICAgaWYgKDIqbmV3U2l6ZSA+IG1fY2FwYWNpdHkpCisgICAg
ICAgICAgICByZWhhc2goZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIHJl
bW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgSGFzaE1h
cEJ1Y2tldCoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAgICAgaWYgKCFi
dWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgLy8gRklYTUU6IHN0b3AgbGVha2luZyBtZW1vcnkgaGVyZSwgYW5k
IGZpZ3VyZSBvdXQgaXRlcmF0b3JzLgorICAgICAgICBIYXNoTWFwQnVja2V0KiBpbXBsID0gKmJ1
Y2tldDsKKyAgICAgICAgaW1wbC0+bmV4dCgpLT5zZXRQcmV2KHZtLCBpbXBsLT5wcmV2KCkpOwor
ICAgICAgICBpbXBsLT5wcmV2KCktPnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7CisgICAgICAg
IGltcGwtPmRlbGV0ZWQgPSB0cnVlOworCisgICAgICAgICpidWNrZXQgPSBkZWxldGVkVmFsdWUo
KTsKKworICAgICAgICBtX2RlbGV0ZUNvdW50Kys7CisKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgICAgICBtX2NhcGFjaXR5ID0gbV9jYXBhY2l0eSAq
IDI7CisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhpcywgSGFzaE1hcEJ1ZmZlcjo6Y3JlYXRl
KHZtLCBtX2NhcGFjaXR5KSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAg
ICAgICAgICAgIEFTU0VSVChpc0VtcHR5KG1fYnVmZmVyLT5idWZmZXIoKVtpXSkpOworICAgICAg
ICB9CisKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogaXRlciA9IG1faGVhZC0+bmV4dCgpOworICAg
ICAgICBIYXNoTWFwQnVja2V0KiBlbmQgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIGNvbnN0IHVp
bnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoISht
X2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOworICAgICAgICBIYXNoTWFwQnVja2V0Kiog
YnVmZmVyID0gbV9idWZmZXItPmJ1ZmZlcigpOworICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQp
IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIGl0ZXItPmtl
eS5nZXQoKSkgJiBtYXNrOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEhhc2hNYXBC
dWNrZXQqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgd2hpbGUgKCFp
c0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAx
KSAmIG1hc2s7CisgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2luZGV4
XSA9IGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gaXRlci0+bmV4dCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSB1aW50MzJfdCBzaXplKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fc2l6ZSA+PSBtX2RlbGV0ZUNvdW50KTsKKyAgICAgICAg
cmV0dXJuIG1fc2l6ZSAtIG1fZGVsZXRlQ291bnQ7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgICAgIG1fc2l6ZSA9IDA7CisgICAgICAgIG1fZGVsZXRlQ291bnQgPSAw
OworICAgICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1f
dGFpbC0+c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9jYXBhY2l0eSA9IDQ7
CisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhpcywgSGFzaE1hcEJ1ZmZlcjo6Y3JlYXRlKHZt
LCBtX2NhcGFjaXR5KSk7CisgICAgfQorCisvLyBGSVhNRTogbWFrZSBwcml2YXRlLgorcHVibGlj
OgorICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX2hlYWQ7CisgICAgV3JpdGVCYXJy
aWVyPEhhc2hNYXBCdWNrZXQ+IG1fdGFpbDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1ZmZl
cj4gbV9idWZmZXI7CisgICAgdWludDMyX3QgbV9zaXplOworICAgIHVpbnQzMl90IG1fZGVsZXRl
Q291bnQ7CisgICAgdWludDMyX3QgbV9jYXBhY2l0eTsKK307CisKIGNsYXNzIEpTTWFwSXRlcmF0
b3I7CiAKIGNsYXNzIEpTTWFwIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKQEAgLTky
LDI3ICs0MzEsNDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTTWFwVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU01hcCogaW5zdGFuY2UgPSBuZXcgKE5vdE51
bGwsIGFsbG9jYXRlQ2VsbDxKU01hcD4odm0uaGVhcCkpIEpTTWFwKHZtLCBzdHJ1Y3R1cmUpOwot
ICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBpbnN0YW5jZS0+
ZmluaXNoQ3JlYXRpb24odm0sIHN0cnVjdHVyZS0+Z2xvYmFsT2JqZWN0KCkpOwogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisKICAgICBzdGF0aWMgSlNNYXAqIGNy
ZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAg
ICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIGJv
b2wgaGFzKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwogICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSop
OwotICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0KEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKTsK
LSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+Z2V0KGV4ZWMsIGtl
eSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5oYXMoZXhlYywga2V5
KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21hcC0+c2V0KGV4
ZWMsIHRoaXMsIGtleSwgdmFsdWUpOworICAgIH0KKyAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSog
ZXhlYykKKyAgICB7CisgICAgICAgIG1fbWFwLT5jbGVhcihleGVjKTsKKyAgICB9CisgICAgYm9v
bCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX21hcC0+cmVtb3ZlKGV4ZWMsIGtleSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIEpT
TWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjYsNiArNDg0LDkgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CiAgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRv
ciYsIENvcHlUb2tlbik7CiAKKyAgICAvLyBGSVhNRTogZG9uJ3QgbWFrZSB0aGlzIHB1YmxpYy4K
K3B1YmxpYzoKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEltcGw+IG1fbWFwOwogICAgIE1hcERh
dGEgbV9tYXBEYXRhOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRv
ci5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAiQ29tbW9uSWRlbnRp
ZmllcnMuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
TWFwLmgiCkBAIC00MSw2ICs0NCwxMCBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0
aW9uKFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFwLnNl
dCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIEpTT2JqZWN0KiBsaXN0SGVhZCA9IGpz
Q2FzdDxKU09iamVjdCo+KGl0ZXJhdGVkT2JqZWN0LT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLm1hcEhlYWRQcml2YXRlTmFtZSgpKSk7CisgICAgcHV0RGly
ZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5tYXBCdWNrZXRQcml2YXRl
TmFtZSgpLCBsaXN0SGVhZCwgRG9udEVudW0pOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwSXRlcmF0aW9uS2luZFByaXZhdGVOYW1lKCksIGpz
TnVtYmVyKHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2tpbmQpKSwgRG9udEVudW0pOworICAgIG1f
aXRlciA9IG1fbWFwLT5tX21hcC0+bV9oZWFkLmdldCgpOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJl
dmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRl
cmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTYgKzUzLDE5IEBAIHB1YmxpYzoKIAogICAg
IGJvb2wgbmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewot
ICAgICAgICBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAg
ICBpZiAoIW1faXRlcmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVj
a2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgJiYgYnVja2V0LT5k
ZWxldGVkKQorICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgIGlm
ICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX2l0ZXIgPSBi
dWNrZXQ7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVyYXRlVmFsdWUpCi0gICAgICAgICAg
ICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+dmFsdWUu
Z2V0KCk7CiAgICAgICAgIGVsc2UgaWYgKG1fa2luZCA9PSBJdGVyYXRlS2V5KQotICAgICAgICAg
ICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT5rZXkuZ2V0
KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihjYWxsRnJh
bWUsIHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFp
cihjYWxsRnJhbWUsIGJ1Y2tldC0+a2V5LmdldCgpLCBidWNrZXQtPnZhbHVlLmdldCgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC05NiwxNCArOTksMTQgQEAgcHJpdmF0ZToK
ICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgICAgICwgbV9pdGVyYXRvcihpdGVy
YXRlZE9iamVjdC0+bV9tYXBEYXRhLmNyZWF0ZUl0ZXJhdG9yRGF0YSh0aGlzKSkKICAgICAgICAg
LCBtX2tpbmQoa2luZCkKLSAgICB7Ci0gICAgfQorICAgIHsgfQogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTTWFwKik7CiAgICAgSlNWYWx1ZSBjcmVh
dGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxK
U01hcD4gbV9tYXA7CisgICAgSGFzaE1hcEJ1Y2tldCogbV9pdGVyOwogICAgIEpTTWFwOjpNYXBE
YXRhOjpJdGVyYXRvckRhdGEgbV9pdGVyYXRvcjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2luZDsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24g
MjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTgyLDggKzgyLDkgQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBN
b2R1bGVFbnZpcm9ubWVudFR5cGUsCiAgICAgUmVnRXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9i
amVjdFR5cGUsCisgICAgSlNNYXBUeXBlLAogCi0gICAgTGFzdEpTQ09iamVjdFR5cGUgPSBQcm94
eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVjdFR5cGUgPSBKU01hcFR5cGUsCiB9OwogCiBD
T01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9PSBzaXplb2YodWludDhfdCksIHNpemVvZl9q
c3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA0OTI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCArMzIsMjQgQEAKICNpbmNsdWRlICJKU01hcEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCisjaW5jbHVkZSAiTWFwSXRl
cmF0b3JQcm90b3R5cGUubHV0LmgiCisKKy8qIFNvdXJjZSBmb3IgTWFwSXRlcmF0b3JQcm90b3R5
cGUubHV0LmgKK0BiZWdpbiBtYXBJdGVyYXRvclByb3RvdHlwZVRhYmxlCitAZW5kCisqLworICAv
L25leHQgICAgICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDAKKwogbmFtZXNwYWNlIEpT
QyB7CiAKLWNvbnN0IENsYXNzSW5mbyBNYXBJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAi
TWFwIEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNYXBJ
dGVyYXRvclByb3RvdHlwZSkgfTsKK2NvbnN0IENsYXNzSW5mbyBNYXBJdGVyYXRvclByb3RvdHlw
ZTo6c19pbmZvID0geyAiTWFwIEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgJm1hcEl0ZXJhdG9y
UHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoTWFwSXRlcmF0b3JQcm90b3R5cGUp
IH07CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yUHJv
dG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7CiAKIHZvaWQgTWFwSXRlcmF0b3JQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
KyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2JqZWN0KTsKKwogICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7CiAgICAgdm0ucHJvdG90eXBl
TWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAkocmV2aXNpb24gMjA0OTI2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsOCBAQCBjbGFzcyBNYXBJdGVyYXRvclByb3RvdHlw
ZSA6IHB1YmxpYyBKU05vCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJh
c2U7CiAKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBIYXNTdGF0
aWNQcm9wZXJ0eVRhYmxlIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKICAgICBzdGF0aWMgTWFw
SXRlcmF0b3JQcm90b3R5cGUqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgTWFwSXRlcmF0b3JQ
cm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPE1hcEl0ZXJh
dG9yUHJvdG90eXBlPih2bS5oZWFwKSkgTWFwSXRlcmF0b3JQcm90b3R5cGUodm0sIHN0cnVjdHVy
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgY29uc3Qg
Q2xhc3NJbmZvIE1hcFByb3RvdHlwZTo6c19pbmZvID0gewogLyogU291cmNlIGZvciBNYXBQcm90
b3R5cGUubHV0LmgKIEBiZWdpbiBtYXBQcm90b3R5cGVUYWJsZQogICBmb3JFYWNoICAgSlNCdWls
dGluICBEb250RW51bXxGdW5jdGlvbiAwCisgIGhhcyAgICAgICBKU0J1aWx0aW4gIERvbnRFbnVt
fEZ1bmN0aW9uIDEKKyAgbGlzdEFzQXJyYXkgICAgICAgSlNCdWlsdGluICBEb250RW51bXxGdW5j
dGlvbiAwCiBAZW5kCiAqLwogCkBAIC03MCwxNSArNzIsMTYgQEAgdm9pZCBNYXBQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIsIG1hcFByb3RvRnVuY0NsZWFyLCBE
b250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgbWFwUHJvdG9GdW5jRGVsZXRlLCBEb250
RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKLSAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5o
YXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklO
U0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1h
cFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKKyAgICBKU0Nf
TkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxLCBKU01hcEhhc0ludHJpbnNp
Yyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5rZXlzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNLZXlzLCBEb250RW51bSwgMCk7
CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNWYWx1
ZXMsIERvbnRFbnVtLCAwKTsKIAotICAgIC8vIFByaXZhdGUgZ2V0IC8gc2V0IG9wZXJhdGlvbnMu
Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jR2V0LCBE
b250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJv
dG9GdW5jU2V0LCBEb250RW51bSwgMik7CisgICAgLy9KU0Z1bmN0aW9uKiBnZXRGdW5jdGlvbiA9
IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbih2bSwgbWFwUHJvdG90eXBlR2V0Q29k
ZUdlbmVyYXRvcih2bSksIGdsb2JhbE9iamVjdCwgImdldCIpOworICAgIC8vSlNGdW5jdGlvbiog
c2V0RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpjcmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIG1hcFBy
b3RvdHlwZVNldENvZGVHZW5lcmF0b3Iodm0pLCBnbG9iYWxPYmplY3QsICJzZXQiKTsKKyAgICAv
L3B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5nZXRQcml2YXRlTmFtZSgpLCBnZXRGdW5jdGlvbiwgRG9udEVudW0pOworICAgIC8v
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLnNldFByaXZhdGVOYW1lKCksIHNldEZ1bmN0aW9uLCBEb250RW51bSk7CiAKICAgICBK
U0Z1bmN0aW9uKiBlbnRyaWVzID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCku
c3RyaW5nKCksIG1hcFByb3RvRnVuY0VudHJpZXMpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGlj
TmFtZSgpLCBlbnRyaWVzLCBEb250RW51bSk7CkBAIC05MCwxNiArOTMsMTMgQEAgdm9pZCBNYXBQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBK
U01hcCogZ2V0TWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsK
LSAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKCF0aGlzVmFsdWUuaXND
ZWxsKCkpIHsKICAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgY3JlYXRlTm90QW5PYmpl
Y3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICB9Ci0gICAgSlNNYXAqIG1hcCA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUp
OwotICAgIGlmICghbWFwKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVND
SUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpKTsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBtYXA7CisgICAgaWYgKHRo
aXNWYWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpTTWFwVHlwZSkKKyAgICAgICAgcmV0dXJuIGpz
Q2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCkBAIC0xNTAsNyArMTUwLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW4KICAgICBKU01hcCogbWFwID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihtYXAtPnNpemUoY2FsbEZyYW1lKSkpOworICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsK
KyAgICBKU1ZhbHVlIG1hcFNpemUgPSBtYXAtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkubWFwU2l6ZVByaXZhdGVOYW1lKCkpOworICAgIEpTVmFsdWUgZGVs
ZXRlQ291bnQgPSBtYXAtPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkubWFwRGVsZXRlQ291bnRQcml2YXRlTmFtZSgpKTsKKyAgICBBU1NFUlQobWFwU2l6ZS5h
c1VJbnQzMigpID49IGRlbGV0ZUNvdW50LmFzVUludDMyKCkpOworICAgIHVuc2lnbmVkIG51bUVs
ZW1lbnRzID0gbWFwU2l6ZS5hc1VJbnQzMigpIC0gZGVsZXRlQ291bnQuYXNVSW50MzIoKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bUVsZW1lbnRzKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jVmFsdWVzKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtMTc3LDExICsxODIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9y
OjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZUtleSkpOwogfQog
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRHluYW1p
Y0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKTsKLX0KLQogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSog
ZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQ
cm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBQcm90b3R5cGUuaAkocmV2aXNpb24gMjA0OTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsK
IH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVj
U3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVy
YXRvcihFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1
bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIwNDkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1
ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5j
bHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKQEAgLTI1MSw2ICsy
NTIsOSBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgq
dGhpcywgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICNlbmRpZgorICAgIGhhc2hNYXBCdWNrZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBI
YXNoTWFwQnVja2V0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
aGFzaE1hcEJ1ZmZlclN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWZmZXI6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEhhc2hNYXBJbXBsOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAKICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6
Y3JlYXRlKCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpLCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRo
aXMsIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDQ5
MjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMzAsNiArMzMwLDkgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxD
b2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tT
dHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEJ1Y2tldFN0cnVjdHVyZTsK
KyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFwQnVmZmVyU3RydWN0dXJlOworICAgIFN0cm9u
ZzxTdHJ1Y3R1cmU+IGhhc2hNYXBJbXBsU3RydWN0dXJlOwogCiAgICAgU3Ryb25nPEpTQ2VsbD4g
aXRlcmF0aW9uVGVybWluYXRvcjsKICAgICBTdHJvbmc8SlNDZWxsPiBlbXB0eVByb3BlcnR5TmFt
ZUVudW1lcmF0b3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287143</attachid>
            <date>2016-08-26 13:54:14 -0700</date>
            <delta_ts>2016-08-29 20:40:58 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>127293</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDUw
MzEpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtOTYsNiArOTYsNyBAQCBKYXZh
U2NyaXB0Q29yZV9CVUlMVElOU19TT1VSQ0VTID0gXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1
aWx0aW5zL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5qcyBcCiAgICAgJChKYXZhU2Ny
aXB0Q29yZSkvYnVpbHRpbnMvSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgXAogICAgICQo
SmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL0l0ZXJhdG9yUHJvdG90eXBlLmpzIFwKKyAgICAkKEph
dmFTY3JpcHRDb3JlKS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcyBcCiAgICAgJChK
YXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3Jp
cHRDb3JlKS9idWlsdGlucy9Nb2R1bGVMb2FkZXJQcm90b3R5cGUuanMgXAogICAgICQoSmF2YVNj
cmlwdENvcmUpL2J1aWx0aW5zL051bWJlckNvbnN0cnVjdG9yLmpzIFwKQEAgLTE0Niw2ICsxNDcs
NyBAQCBPQkpFQ1RfTFVUX0hFQURFUlMgPSBcCiAgICAgSlNPTk9iamVjdC5sdXQuaCBcCiAgICAg
SlNQcm9taXNlUHJvdG90eXBlLmx1dC5oIFwKICAgICBKU1Byb21pc2VDb25zdHJ1Y3Rvci5sdXQu
aCBcCisgICAgTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmggXAogICAgIE1hcFByb3RvdHlwZS5s
dXQuaCBcCiAgICAgTW9kdWxlTG9hZGVyUHJvdG90eXBlLmx1dC5oIFwKICAgICBOdW1iZXJDb25z
dHJ1Y3Rvci5sdXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1MjMsNiArMzUyMyw3IEBA
CiAJCTcyQUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ3VzdG9tR2V0
dGVyU2V0dGVyRnVuY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MkFB
RjdDQzFEMEQzMThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0
aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3QjI1Q0IyQzMwOTRBOTJBMzhF
MURCMyAvKiBKU01vZHVsZUxvYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBKU01vZHVsZUxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTAxMDcz
NzFENjY5NzRDMDA1ODA0MjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3Jp
cHQ7IHBhdGggPSBNYXBJdGVyYXRvclByb3RvdHlwZS5qczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzkwNUJCNjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVBY2Nlc3MuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5s
aW5lQWNjZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZUFjY2Vz
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTE2MERCQjFDOEUzRUM4MDA4QzA4
NUEgLyogUHJveHlSZXZva2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUHJveHlSZXZva2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzAxOSw2
ICs3MDIwLDcgQEAKIAkJCQlFMzNGNTA4ODFCODQ0QTFBMDA0MTM4NTYgLyogSW50ZXJuYWxQcm9t
aXNlQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJN0NGOUJDNUIxQjY1RDlBMzAwOURCMUVGIC8qIEl0
ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCTcwMzU1ODdDMUM0MTg0MTkwMDRCRDdCRiAvKiBN
YXBQcm90b3R5cGUuanMgKi8sCisJCQkJNzkwMTA3MzcxRDY2OTc0QzAwNTgwNDIyIC8qIE1hcEl0
ZXJhdG9yUHJvdG90eXBlLmpzICovLAogCQkJCUUzMDY3Nzk3MUI4QkM2RjUwMDNGODdGMCAvKiBN
b2R1bGVMb2FkZXJQcm90b3R5cGUuanMgKi8sCiAJCQkJQTUyNzA0ODYxRDAyN0M4ODAwMzU0QzM3
IC8qIE51bWJlckNvbnN0cnVjdG9yLmpzICovLAogCQkJCUExNURFNUM1MUMwRkJGOEQwMDg5MTMz
RCAvKiBOdW1iZXJQcm90b3R5cGUuanMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J1aWx0aW5zL0J1aWx0aW5OYW1lcy5oCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTkxLDggKzkxLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8oY2FwYWJpbGl0aWVzKSBc
CiAgICAgbWFjcm8oc3RhckRlZmF1bHQpIFwKICAgICBtYWNybyhJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24pIFwKLSAgICBtYWNybyhnZXQpIFwKLSAgICBtYWNybyhzZXQpIFwKICAgICBtYWNybyhz
aGlmdCkgXAogICAgIG1hY3JvKGFsbG9jYXRlVHlwZWRBcnJheSkgXAogICAgIG1hY3JvKEludDhB
cnJheSkgXApAQCAtMTM0LDcgKzEzMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIG1hY3JvKHBy
ZWRpY3RGaW5hbExlbmd0aEZyb21Bcmd1bXVudHMpIFwKICAgICBtYWNybyhwcmludCkgXAogICAg
IG1hY3JvKGlzU2V0KSBcCi0gICAgbWFjcm8oaXNNYXApIFwKICAgICBtYWNybyhyZWdFeHBDcmVh
dGUpIFwKICAgICBtYWNybyhTZXRJdGVyYXRvcikgXAogICAgIG1hY3JvKHNldEl0ZXJhdG9yTmV4
dCkgXApAQCAtMTU4LDcgKzE1NSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBtYWNybyhyZWdF
eHBUZXN0RmFzdCkgXAogICAgIG1hY3JvKHN0cmluZ0luY2x1ZGVzSW50ZXJuYWwpIFwKICAgICBt
YWNybyhzdHJpbmdTcGxpdEZhc3QpIFwKLSAgICBtYWNybyhzdHJpbmdTdWJzdHJJbnRlcm5hbCkK
KyAgICBtYWNybyhzdHJpbmdTdWJzdHJJbnRlcm5hbCkgXAorICAgIG1hY3JvKG1hcEhlYWQpIFwK
KyAgICBtYWNybyhtYXBUYWlsKSBcCisgICAgbWFjcm8obWFwVGFibGUpIFwKKyAgICBtYWNybyht
YXBIYXNoKSBcCisgICAgbWFjcm8obWFwU2l6ZSkgXAorICAgIG1hY3JvKG1hcERlbGV0ZUNvdW50
KSBcCisgICAgbWFjcm8obWFwQnVja2V0KSBcCisgICAgbWFjcm8obWFwSXRlcmF0aW9uS2luZCkg
XAogCiAKICNkZWZpbmUgSU5JVElBTElaRV9QUklWQVRFX1RPX1BVQkxJQ19FTlRSWShuYW1lKSBt
X3ByaXZhdGVUb1B1YmxpY01hcC5hZGQobV8jI25hbWUjI1ByaXZhdGVOYW1lLmltcGwoKSwgJm1f
IyNuYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBJdGVyYXRv
clByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvTWFwSXRlcmF0b3JQcm90b3R5cGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnVpbHRpbnMvTWFwSXRlcmF0b3JQcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK2Z1bmN0aW9uIG5leHQoKQoreworICAgIGxldCBsYXN0TWFwQnVja2V0ID0gdGhpcy5A
bWFwQnVja2V0OworICAgIGlmICghbGFzdE1hcEJ1Y2tldCkKKyAgICAgICAgdGhyb3cgbmV3IEBU
eXBlRXJyb3IoIkNhbm5vdCBjYWxsIE1hcEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1NYXBJdGVy
YXRvciBvYmplY3QiKTsKKworICAgIGxldCBsaXN0TmV4dCA9IGxhc3RNYXBCdWNrZXQubGlzdE5l
eHQ7CisgICAgd2hpbGUgKGxpc3ROZXh0ICYmIGxpc3ROZXh0LmRlbGV0ZWQpCisgICAgICAgIGxp
c3ROZXh0ID0gbGlzdE5leHQubGlzdE5leHQ7CisKKyAgICBpZiAobGlzdE5leHQpIHsKKyAgICAg
ICAgdGhpcy5AbWFwQnVja2V0ID0gbGlzdE5leHQ7CisgICAgICAgIGlmICh0aGlzLkBtYXBJdGVy
YXRpb25LaW5kID09PSBAaXRlcmF0aW9uS2luZEtleVZhbHVlKQorICAgICAgICAgICAgcmV0dXJu
IHtkb25lOiBmYWxzZSwgdmFsdWU6IFtsaXN0TmV4dC5rZXksIGxpc3ROZXh0LnZhbHVlXX07Cisg
ICAgICAgIGlmICh0aGlzLkBtYXBJdGVyYXRpb25LaW5kID09PSBAaXRlcmF0aW9uS2luZEtleSkK
KyAgICAgICAgICAgIHJldHVybiB7ZG9uZTogZmFsc2UsIHZhbHVlOiBsaXN0TmV4dC5rZXl9Owor
ICAgICAgICAvLyBWYWx1ZQorICAgICAgICByZXR1cm4ge2RvbmU6IGZhbHNlLCB2YWx1ZTogbGlz
dE5leHQudmFsdWV9OworICAgIH0KKyAgICByZXR1cm4ge2RvbmU6IHRydWV9OworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL01hcFByb3RvdHlwZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzCShyZXZp
c2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90
eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNyArMjgsNyBAQCBmdW5jdGlvbiBmb3JFYWNoKGNh
bGxiYWNrIC8qLCB0aGlzQXJnICovCiB7CiAgICAgInVzZSBzdHJpY3QiOwogCi0gICAgaWYgKCFA
aXNNYXAodGhpcykpCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKICAgICAgICAgdGhyb3cgbmV3
IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CiAK
ICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKQpAQCAtNDQsMyArNDUsMjAw
IEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8KICAgICAgICAgY2Fs
bGJhY2suQGNhbGwodGhpc0FyZywgdmFsdWVbMV0sIHZhbHVlWzBdLCB0aGlzKTsKICAgICB9CiB9
CisKK2Z1bmN0aW9uIGdldChrZXkpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFA
aXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRp
b24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICBsZXQgdGFibGUgPSB0aGlzLkBt
YXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4gPSB0YWJsZS5sZW5ndGg7IAorICAgIGxldCBtYXNr
ID0gdGFibGVMZW4gLSAxOworICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkpICYgbWFzazsK
KyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgLy9sZXQgYWRkZXIgPSAxOworICAg
IHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgbGV0IGJ1Y2tldEtleSA9IGJ1Y2tldC5rZXk7Cisg
ICAgICAgIGlmICgoYnVja2V0S2V5ID09PSBrZXkgfHwgKGJ1Y2tldEtleSAhPT0gYnVja2V0S2V5
ICYmIGtleSAhPT0ga2V5KSkgJiYgIWJ1Y2tldC5kZWxldGVkKQorICAgICAgICAgICAgcmV0dXJu
IGJ1Y2tldC52YWx1ZTsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAg
ICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioyKSAmIG1hc2s7CisgICAgICAgIGJ1Y2tldCA9IHRh
YmxlW2hhc2hdOworICAgICAgICAvL2FkZGVyKys7CisgICAgfQorICAgIHJldHVybiBAdW5kZWZp
bmVkOworfQorCitmdW5jdGlvbiBoYXMoa2V5KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAg
IGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAg
b3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHRhYmxlID0g
dGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3RoOyAKKyAgICBs
ZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhhc2goa2V5KSAm
IG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0IGFkZGVyID0g
MTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGxldCBidWNrZXRLZXkgPSBidWNrZXQu
a2V5OworICAgICAgICBpZiAoKGJ1Y2tldEtleSA9PT0ga2V5IHx8IChidWNrZXRLZXkgIT09IGJ1
Y2tldEtleSAmJiBrZXkgIT09IGtleSkpICYmICFidWNrZXQuZGVsZXRlZCkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioyKSAmIG1hc2s7
CisgICAgICAgIGhhc2ggPSAoaGFzaCArIDEpICYgbWFzazsKKyAgICAgICAgYnVja2V0ID0gdGFi
bGVbaGFzaF07CisgICAgICAgIC8vYWRkZXIrKzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCitmdW5jdGlvbiBkZWxldGUoa2V5KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlm
ICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3Bl
cmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHRhYmxlID0gdGhp
cy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxlTGVuID0gdGFibGUubGVuZ3RoOyAKKyAgICBsZXQg
bWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBsZXQgaGFzaCA9IEBqc01hcEhhc2goa2V5KSAmIG1h
c2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgIC8vbGV0IGFkZGVyID0gMTsK
KyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAgICAgIGxldCBidWNrZXRLZXkgPSBidWNrZXQua2V5
OworICAgICAgICBpZiAoKGJ1Y2tldC5rZXkgPT09IGtleSB8fCAoYnVja2V0S2V5ICE9PSBidWNr
ZXRLZXkgJiYga2V5ICE9PSBrZXkpICYmICFidWNrZXQuZGVsZXRlZCkgeworICAgICAgICAgICAg
YnVja2V0LmRlbGV0ZWQgPSB0cnVlOworICAgICAgICAgICAgYnVja2V0Lmxpc3ROZXh0Lmxpc3RQ
cmV2ID0gYnVja2V0Lmxpc3RQcmV2OworICAgICAgICAgICAgYnVja2V0Lmxpc3RQcmV2Lmxpc3RO
ZXh0ID0gYnVja2V0Lmxpc3ROZXh0OworICAgICAgICAgICAgKyt0aGlzLkBtYXBEZWxldGVDb3Vu
dDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIC8vaGFzaCA9
IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBt
YXNrOworICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisrOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisKK30KKworQGdsb2JhbFByaXZhdGUKK2Z1bmN0aW9u
IGpzTWFwUmVoYXNoKG1hcCwgb2xkTGVuKQoreworICAgIHRoaXMuQG1hcFNpemUgPSB0aGlzLkBt
YXBTaXplIC0gdGhpcy5AbWFwRGVsZXRlQ291bnQ7CisgICAgdGhpcy5AbWFwRGVsZXRlQ291bnQg
PSAwOworICAgIGxldCBuZXdTaXplID0gb2xkTGVuICogMjsKKyAgICBsZXQgdGFibGUgPSBuZXcg
QEFycmF5KG5ld1NpemUpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGUubGVuZ3RoOyBp
KyspCisgICAgICAgIHRhYmxlW2ldID0gQHVuZGVmaW5lZDsKKyAgICBtYXAuQG1hcFRhYmxlID0g
dGFibGU7CisgICAgbGV0IG1hc2sgPSBuZXdTaXplIC0gMTsKKyAgICBsZXQgbm9kZSA9IG1hcC5A
bWFwSGVhZC5saXN0TmV4dDsKKyAgICBsZXQgbmV4dE5vZGUgPSBub2RlLmxpc3ROZXh0OworICAg
IHdoaWxlIChuZXh0Tm9kZSkgeworICAgICAgICBsZXQga2V5ID0gbm9kZS5rZXk7CisgICAgICAg
IGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkpICYgbWFzazsKKyAgICAgICAgbGV0IGJ1Y2tldCA9
IHRhYmxlW2hhc2hdOworICAgICAgICAvL2xldCBhZGRlciA9IDE7CisgICAgICAgIHdoaWxlIChi
dWNrZXQpIHsKKyAgICAgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsK
KyAgICAgICAgICAgIGhhc2ggPSAoaGFzaCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tl
dCA9IHRhYmxlW2hhc2hdOworICAgICAgICAgICAgLy9hZGRlcisrOworICAgICAgICB9CisKKyAg
ICAgICAgdGFibGVbaGFzaF0gPSBub2RlOworICAgICAgICBub2RlID0gbmV4dE5vZGU7CisgICAg
ICAgIG5leHROb2RlID0gbmV4dE5vZGUubGlzdE5leHQ7CisgICAgfQorfQorCitmdW5jdGlvbiBz
ZXQoa2V5LCB2YWx1ZSkKK3sKKyAgICAidXNlIHN0cmljdCI7CisKKyAgICBpZiAoIUBpc0pTTWFw
KHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxs
ZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKKworICAgIGxldCB0YWJsZSA9IHRoaXMuQG1hcFRhYmxl
OworICAgIGxldCB0YWJsZUxlbiA9IHRhYmxlLmxlbmd0aDsgCisgICAgbGV0IG1hc2sgPSB0YWJs
ZUxlbiAtIDE7CisgICAgbGV0IGhhc2ggPSBAanNNYXBIYXNoKGtleSkgJiBtYXNrOworICAgIGxl
dCBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAvL2xldCBhZGRlciA9IDE7CisgICAgd2hpbGUg
KGJ1Y2tldCkgeworICAgICAgICBsZXQgYnVja2V0S2V5ID0gYnVja2V0LmtleTsKKyAgICAgICAg
aWYgKGJ1Y2tldC5rZXkgPT09IGtleSB8fCAoYnVja2V0S2V5ICE9PSBidWNrZXRLZXkgJiYga2V5
ICE9PSBrZXkpKSB7CisgICAgICAgICAgICBidWNrZXQudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAg
ICAgIGJ1Y2tldC5kZWxldGVkID0gZmFsc2U7IC8vIE1heWJlIHdlIHdlcmUgZGVsZXRlZCBiZWZv
cmUsIGJ1dCB3ZSBhcmUgbm90IGFueW1vcmUuCisgICAgICAgICAgICArK3RoaXMuQG1hcFNpemU7
CisgICAgICAgICAgICAtLXRoaXMuQG1hcERlbGV0ZUNvdW50OworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsK
KyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAgICBidWNrZXQgPSB0YWJs
ZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisrOworICAgIH0KKworICAgIGxldCBtYXBUYWlsID0g
dGhpcy5AbWFwVGFpbDsKKyAgICBsZXQgbmV3SXRlbSA9IHsKKyAgICAgICAgbGlzdE5leHQ6IG1h
cFRhaWwsCisgICAgICAgIGxpc3RQcmV2OiBtYXBUYWlsLmxpc3RQcmV2LAorICAgICAgICBrZXk6
IGtleSwKKyAgICAgICAgdmFsdWU6IHZhbHVlLAorICAgICAgICBkZWxldGVkOiBmYWxzZQorICAg
IH07CisgICAgbWFwVGFpbC5saXN0UHJldiA9IG5ld0l0ZW07CisgICAgbmV3SXRlbS5saXN0UHJl
di5saXN0TmV4dCA9IG5ld0l0ZW07CisKKyAgICB0YWJsZVtoYXNoXSA9IG5ld0l0ZW07CisKKyAg
ICBsZXQgbmV3U2l6ZSA9ICsrdGhpcy5AbWFwU2l6ZTsKKyAgICBpZiAoMiAqIG5ld1NpemUgPiB0
YWJsZUxlbikgeyAvLyBEbyBpbnQgbXVscyBhbmQgY29tcGFyZS4gVGhpcyBpcyBqdXN0IGNoZWNr
aW5nIGlmIHdlJ3JlIGZpbGxlZCB1cCBtb3JlIHRoYW4gMS8yLgorICAgICAgICBAanNNYXBSZWhh
c2godGhpcywgdGFibGVMZW4pOworICAgIH0gCit9CisKK2Z1bmN0aW9uIGNsZWFyKGtleSwgdmFs
dWUpCit7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAg
ICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1N
YXAgb2JqZWN0Iik7CisKKyAgICB0aGlzLkBtYXBUYWJsZSA9IEBuZXdBcnJheVdpdGhTaXplKDQp
OworICAgIHRoaXMuQG1hcFRhaWwubGlzdFByZXYgPSB0aGlzLkBtYXBIZWFkOworICAgIHRoaXMu
QG1hcEhlYWQubGlzdE5leHQgPSB0aGlzLkBtYXBUYWlsOworICAgIHRoaXMuQG1hcFNpemUgPSAw
OworICAgIHRoaXMuQG1hcERlbGV0ZUNvdW50ID0gMDsKK30KKworZnVuY3Rpb24gbGlzdEFzQXJy
YXkoKQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisg
ICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24t
TWFwIG9iamVjdCIpOworCisgICAgbGV0IHJlc3VsdCA9IFtdOworCisgICAgbGV0IGJ1Y2tldCA9
IHRoaXMuQG1hcEhlYWQ7CisgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICByZXN1bHQucHVz
aCh7CisgICAgICAgICAgICBrZXk6IGJ1Y2tldC5rZXkgfHwgIkVNUFRZIiwKKyAgICAgICAgICAg
IHZhbHVlOiBidWNrZXQudmFsdWUgfHwgIkVNUFRZIgorICAgICAgICB9KTsKKyAgICAgICAgYnVj
a2V0ID0gYnVja2V0Lmxpc3ROZXh0OworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICB0YWJs
ZUxlbmd0aDogdGhpcy5AbWFwVGFibGUubGVuZ3RoLAorICAgICAgICBtYXBTaXplOiB0aGlzLkBt
YXBTaXplLAorICAgICAgICBhcnJheTogcmVzdWx0CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnkuaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksOCBAQCBjbGFzcyBJZGVudGlmaWVyOwogICAgIG1hY3JvKHRvTnVtYmVyKSBcCiAgICAg
bWFjcm8odG9TdHJpbmcpIFwKICAgICBtYWNybyhuZXdBcnJheVdpdGhTaXplKSBcCisgICAgbWFj
cm8oanNNYXBIYXNoKSBcCisgICAgbWFjcm8oaXNKU01hcCkgXAogCiAjZGVmaW5lIEpTQ19DT01N
T05fQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UU19FQUNIX05BTUUobWFjcm8pIFwKICAgICBt
YWNybyh1bmRlZmluZWQpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpc3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAt
NTcsNiArNTcsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfaXNfbnVtYmVyIiwgImxl
bmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19zdHJpbmciLCAibGVu
Z3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2pzYXJyYXkiLCAibGVu
Z3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX2pzbWFwIiwgImxlbmd0
aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19vYmplY3QiLCAibGVuZ3Ro
IiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2lzX29iamVjdF9vcl9udWxsIiwg
Imxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9pc19mdW5jdGlvbiIs
ICJsZW5ndGgiIDogMyB9LApAQCAtMTQ2LDcgKzE0Nyw4IEBACiAgICAgICAgICAgICB7ICJuYW1l
IiA6ICJvcF95aWVsZCIsICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3Bfd2F0Y2hkb2ciLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSIsICJsZW5ndGgiIDogMn0sCi0gICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbCIsICJsZW5ndGgiIDogM30K
KyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsIiwgImxl
bmd0aCIgOiAzfSwKKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2pzbWFwX2hhc2giLCAibGVu
Z3RoIiA6IDMgfQogICAgICAgICBdCiAgICAgfSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMjA1MDMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQsNyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVPZmZzZXQoQmxvY2sqCiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19z
dHJpbmc6CiAgICAgY2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CiAg
ICAgY2FzZSBvcF9pc19vYmplY3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoKICAg
ICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAtMTgzLDYgKzE4NCw3IEBAIHZvaWQgY29tcHV0ZVVz
ZXNGb3JCeXRlY29kZU9mZnNldChCbG9jayoKICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6
CiAgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0
ZV9yZXN0OgorICAgIGNhc2Ugb3BfanNtYXBfaGFzaDoKICAgICBjYXNlIG9wX2dldF9mcm9tX2Fy
Z3VtZW50czogewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsK
ICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKTsKQEAgLTM5Nyw2ICszOTksNyBAQCB2b2lkIGNvbXB1dGVEZWZz
Rm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sqCiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2Fz
ZSBvcF9pc19zdHJpbmc6CiAgICAgY2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNf
anNtYXA6CiAgICAgY2FzZSBvcF9pc19vYmplY3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3Jf
bnVsbDoKICAgICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAtNDQyLDYgKzQ0NSw3IEBAIHZvaWQg
Y29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChCbG9jayoKICAgICBjYXNlIG9wX3Vuc2lnbmVk
OgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJndW1lbnRzOiAKICAgICBjYXNlIG9wX2NyZWF0ZV9y
ZXN0OgorICAgIGNhc2Ugb3BfanNtYXBfaGFzaDoKICAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0
aDogewogICAgICAgICBBU1NFUlQob3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAxKTsKICAgICAg
ICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEwOCw2ICsxMTA4LDE0
IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBwcmludFVuYXJ5
T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19qc2FycmF5Iik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIG9wX2lzX2pzbWFwOiB7CisgICAgICAgICAg
ICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJpc19qc21hcCIpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBvcF9qc21hcF9oYXNoOiB7
CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqc21h
cF9oYXNoIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9w
X2lzX29iamVjdDogewogICAgICAgICAgICAgcHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRp
b24sIGl0LCAiaXNfb2JqZWN0Iik7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2aXNpb24gMjA1MDMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsOCBAQCBlbnVtIERhdGFGb3JtYXQgewogICAgIERhdGFGb3JtYXRC
b29sZWFuID0gNSwKICAgICBEYXRhRm9ybWF0Q2VsbCA9IDYsCiAgICAgRGF0YUZvcm1hdFN0b3Jh
Z2UgPSA3LAotICAgIERhdGFGb3JtYXRKUyA9IDgsCisgICAgRGF0YUZvcm1hdE1hcEJ1Y2tldCA9
IDgsCisgICAgRGF0YUZvcm1hdEpTID0gMTYsCiAgICAgRGF0YUZvcm1hdEpTSW50MzIgPSBEYXRh
Rm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50MzIsCiAgICAgRGF0YUZvcm1hdEpTRG91YmxlID0gRGF0
YUZvcm1hdEpTIHwgRGF0YUZvcm1hdERvdWJsZSwKICAgICBEYXRhRm9ybWF0SlNDZWxsID0gRGF0
YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGwsCkBAIC03Nyw2ICs3OCw4IEBAIGlubGluZSBjb25z
dCBjaGFyKiBkYXRhRm9ybWF0VG9TdHJpbmcoRGEKICAgICAgICAgcmV0dXJuICJCb29sZWFuIjsK
ICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOgogICAgICAgICByZXR1cm4gIlN0b3JhZ2UiOwor
ICAgIGNhc2UgRGF0YUZvcm1hdE1hcEJ1Y2tldDoKKyAgICAgICAgcmV0dXJuICJTdG9yYWdlIjsK
ICAgICBjYXNlIERhdGFGb3JtYXRKUzoKICAgICAgICAgcmV0dXJuICJKUyI7CiAgICAgY2FzZSBE
YXRhRm9ybWF0SlNJbnQzMjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YWx1ZVJlY292ZXJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhbHVlUmVjb3ZlcnkuaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcg
KzE3Myw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0
Tm9uZSAmJiBkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIEFT
U0VSVChkYXRhRm9ybWF0ICE9IERhdGFGb3JtYXROb25lICYmIGRhdGFGb3JtYXQgIT0gRGF0YUZv
cm1hdFN0b3JhZ2UgJiYgZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0TWFwQnVja2V0KTsKICAgICAg
ICAgICAgIHJlc3VsdC5tX3RlY2huaXF1ZSA9IERpc3BsYWNlZEluSlNTdGFjazsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDUwMzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYzMSw2ICs2MzEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBpbmRleCk7CiAKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzSlNBcnJheShSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdFVuYXJ5T3Aob3BfaXNf
anNhcnJheSwgZHN0LCBzcmMpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0pTTWFwKFJl
Z2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlPcChvcF9p
c19qc21hcCwgZHN0LCBzcmMpOyB9CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRKU01hcEhhc2go
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wKG9w
X2pzbWFwX2hhc2gsIGRzdCwgc3JjKTsgfQogICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNPYmpl
Y3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAgICAgICBSZWdpc3RlcklE
KiBlbWl0SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOwogICAg
ICAgICBSZWdpc3RlcklEKiBlbWl0SXNFbXB0eShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQq
IHNyYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29k
ZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
NCw2ICs5NjQsMjcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0Xwog
ICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uLmdldCgpOwogfQogCitSZWdpc3RlcklEKiBCeXRl
Y29kZUludHJpbnNpY05vZGU6OmVtaXRfaW50cmluc2ljX2pzTWFwSGFzaChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yJiBnZW5lcmF0b3IsIEpTQzo6UmVnaXN0ZXJJRCogZHN0KQoreworICAgIEFyZ3Vt
ZW50TGlzdE5vZGUqIG5vZGUgPSBtX2FyZ3MtPm1fbGlzdE5vZGU7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHNpemUgPSBnZW5lcmF0b3IuZW1pdE5vZGUobm9kZSk7CisgICAgQVNTRVJUKCFub2Rl
LT5tX25leHQpOworCisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVzdGluYXRpb24gPSBn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpOworICAgIGdlbmVyYXRvci5lbWl0SlNNYXBI
YXNoKGZpbmFsRGVzdGluYXRpb24uZ2V0KCksIHNpemUuZ2V0KCkpOworICAgIHJldHVybiBmaW5h
bERlc3RpbmF0aW9uLmdldCgpOworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05v
ZGU6OmVtaXRfaW50cmluc2ljX2lzSlNNYXAoSlNDOjpCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJh
dG9yLCBKU0M6OlJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBBcmd1bWVudExpc3ROb2RlKiBub2Rl
ID0gbV9hcmdzLT5tX2xpc3ROb2RlOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBzaXplID0gZ2Vu
ZXJhdG9yLmVtaXROb2RlKG5vZGUpOworICAgIEFTU0VSVCghbm9kZS0+bV9uZXh0KTsKKworICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9uID0gZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KTsKKyAgICBnZW5lcmF0b3IuZW1pdElzSlNNYXAoZmluYWxEZXN0aW5hdGlv
bi5nZXQoKSwgc2l6ZS5nZXQoKSk7CisgICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb24uZ2V0KCk7
Cit9CiAKICNkZWZpbmUgSlNDX0RFQ0xBUkVfQllURUNPREVfSU5UUklOU0lDX0NPTlNUQU5UX0dF
TkVSQVRPUlMobmFtZSkgXAogICAgIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6
ZW1pdF9pbnRyaW5zaWNfIyNuYW1lKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lz
dGVySUQqIGRzdCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA1MDMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzYsNiArOTc2LDE3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBKU01hcEhhc2g6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzJPbmx5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
SXNOb25FbXB0eUpTTWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNh
c2UgSXNKU0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC05ODYsNiArOTk3LDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgSXNPYmpl
Y3RPck51bGw6CiAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgIGNhc2UgSXNSZWdFeHBPYmplY3Q6
CisgICAgY2FzZSBJc0pTTWFwOgogICAgIGNhc2UgSXNUeXBlZEFycmF5VmlldzogewogICAgICAg
ICBBYnN0cmFjdFZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IGlmIChjaGlsZC52YWx1ZSgpKSB7CkBAIC05OTQsNiArMTAwNiw5IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGNhc2UgSXNKU0FycmF5Ogog
ICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52YWx1ZSgp
LmlzT2JqZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09IEFycmF5
VHlwZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJc0pTTWFw
OgorICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52YWx1
ZSgpLmlzT2JqZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09IEpT
TWFwVHlwZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJc1Vu
ZGVmaW5lZDoKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkLnZhbHVlKCkuaXNDZWxsKCkKQEAgLTEyMzUsNiArMTI1
MCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAg
ICAgICAgIGJyZWFrOworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMjI2Myw2ICsyMjgxLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CiAgICAgY2FzZSBHZXRCdXR0ZXJmbHk6CiAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNiArMjUzOCw0
MyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CisKKyAgICBjYXNlIEpTTWFwR2V0SW50cmluc2ljOiB7
CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKworICAgICAgICBOb2Rl
KiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQp
KTsKKyAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEs
IHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKEpTTWFw
SGFzaCwga2V5KTsKKyAgICAgICAgTm9kZSogbG9hZGVkQnVja2V0SW5kZXggPSBhZGRUb0dyYXBo
KEdldEpTTWFwQnVja2V0LCBtYXAsIGtleSwgaGFzaCk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgbWFwLCBsb2FkZWRCdWNrZXRJbmRleCk7
CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIC8vZGF0YUxvZygiTWFwIGdldCBpbnRyaXNu
aWNcbiIpOworICAgICAgICAvL21hY3JvKEdldEpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SW50MzIp
IFwKKyAgICAgICAgLy9tYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwK
KyAgICAgICAgLy9tYWNybyhJc05vbkVtcHR5SlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRCb29sZWFu
KSBcCisKKyAgICAgICAgLy9HZXRKU01hcEJ1Y2tldAorICAgICAgICAvL0xvYWRGcm9tSlNNYXBC
dWNrZXQKKyAgICAgICAgLy9Jc05vbkVtcHR5SlNNYXBCdWNrZXQKKyAgICB9CisKKyAgICBjYXNl
IEpTTWFwSGFzSW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnNlcnRDaGVj
a3MoKTsKKworICAgICAgICBOb2RlKiBtYXAgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1l
bnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGhh
c2ggPSBhZGRUb0dyYXBoKEpTTWFwSGFzaCwga2V5KTsKKyAgICAgICAgTm9kZSogbG9hZGVkQnVj
a2V0SW5kZXggPSBhZGRUb0dyYXBoKEdldEpTTWFwQnVja2V0LCBtYXAsIGtleSwgaGFzaCk7Cisg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoSXNOb25FbXB0eUpTTWFwQnVja2V0LCBs
b2FkZWRCdWNrZXRJbmRleCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3Bl
cmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzk0OCw2ICszOTg1LDE4IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX2lzX2pzYXJyYXkpOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBvcF9p
c19qc21hcDogeworICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgo
SXNKU01hcCwgdmFsdWUpKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2lzX2pzbWFwKTsK
KyAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfanNtYXBfaGFzaDogeworICAgICAgICAgICAg
Tm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSlNNYXBIYXNoLCB2YWx1ZSkpOworICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfanNtYXBfaGFzaCk7CisgICAgICAgIH0KKwogICAgICAg
ICBjYXNlIG9wX2lzX29iamVjdDogewogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
IGFkZFRvR3JhcGgoSXNPYmplY3QsIHZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Miw2ICsxNDIsOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29k
ZUlECiAgICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19zdHJpbmc6CiAgICAg
Y2FzZSBvcF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CisgICAgY2FzZSBvcF9q
c21hcF9oYXNoOgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0OgogICAgIGNhc2Ugb3BfaXNfb2JqZWN0
X29yX251bGw6CiAgICAgY2FzZSBvcF9pc19mdW5jdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTYx
LDYgKzE2MSw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAg
ICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENvbXBhcmVFcVB0cjoKICAgICBjYXNl
IElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNh
c2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46CkBAIC0xOTgsNiArMTk5LDI4IEBA
IHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgfQogICAg
ICAgICByZXR1cm47CiAKKyAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEpTTWFwQnVja2V0OiB7Cisg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5j
aGlsZDEoKTsKKyAgICAgICAgRWRnZSYga2V5RWRnZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwQnVja2V0SW5kZXhMb2MsIE1pc2NGaWVsZHMsIG1hcEVk
Z2UsIGtleUVkZ2UpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7
CisgICAgICAgIEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSYg
YnVja2V0RWRnZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpT
TWFwR2V0TG9jLCBNaXNjRmllbGRzLCBtYXBFZGdlLCBidWNrZXRFZGdlKSwgTGF6eU5vZGUobm9k
ZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVj
a2V0OgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEpTTWFwSGFzTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUp
KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBCaXRBbmQ6CiAgICAgY2FzZSBCaXRPcjoK
ICAgICBjYXNlIEJpdFhvcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw3IEBAIGJvb2wgZG9lc0dD
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgY2Fz
ZSBJbnN0YW5jZU9mQ3VzdG9tOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01h
cDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElz
Qm9vbGVhbjoKQEAgLTE4NSw2ICsxODYsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tXYXRjaGRv
Z1RpbWVyOgogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgIGNhc2UgSlNNYXBIYXNo
OgorICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0
OgorICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgogICAgIGNhc2UgVW5yZWFjaGFibGU6
CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5M
b29wOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
CShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM2LDYgKzE1MzYsMjcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBJc0pTTWFwOiB7
CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkK
KyAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDoK
KyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAg
ICAgZml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhF
ZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBmaXhFZGdlPENlbGxV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+
Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBJc05vbkVtcHR5
SlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAv
LyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdl
dHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDoKQEAgLTE2MDcsNiArMTYyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlW
YWxXaXRoVGhpczoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNl
IENvbXBhcmVFcVB0cjoKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHZW5lcmF0aW9uSW5mby5oCShyZXZpc2lvbiAyMDUwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dlbmVyYXRpb25JbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaW5pdEdQ
Uihub2RlLCB1c2VDb3VudCwgZ3ByLCBEYXRhRm9ybWF0U3RvcmFnZSk7CiAgICAgfQorICAgIHZv
aWQgaW5pdE1hcEJ1Y2tldChOb2RlKiBub2RlLCB1aW50MzJfdCB1c2VDb3VudCwgR1BSUmVnIGdw
cikKKyAgICB7CisgICAgICAgIGluaXRHUFIobm9kZSwgdXNlQ291bnQsIGdwciwgRGF0YUZvcm1h
dE1hcEJ1Y2tldCk7CisgICAgfQogCiAgICAgLy8gR2V0IHRoZSBub2RlIHRoYXQgcHJvZHVjZWQg
dGhpcyB2YWx1ZS4KICAgICBOb2RlKiBub2RlKCkgeyByZXR1cm4gbV9ub2RlOyB9CkBAIC0zNzIs
NiArMzc2LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGZpbGxHUFIoc3RyZWFtLCBncHIs
IERhdGFGb3JtYXRTdG9yYWdlKTsKICAgICB9CisgICAgdm9pZCBmaWxsTWFwQnVja2V0KFZhcmlh
YmxlRXZlbnRTdHJlYW0mIHN0cmVhbSwgR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIGZpbGxH
UFIoc3RyZWFtLCBncHIsIERhdGFGb3JtYXRNYXBCdWNrZXQpOworICAgIH0KIAogICAgIGJvb2wg
YWxpdmUoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExv
Y2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hl
YXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Mywx
NSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAgY2FzZSBS
ZWdFeHBPYmplY3RMYXN0SW5kZXhMb2M6CiAgICAgICAgIG91dC5wcmludCgiUmVnRXhwT2JqZWN0
TGFzdEluZGV4TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTTWFwQnVja2V0SW5k
ZXhMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNNYXBCdWNrZXRJbmRleExvYyIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBKU01hcEdldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01h
cEdldExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01hcEhhc0xvYzoKKyAgICAg
ICAgb3V0LnByaW50KCJKU01hcEhhc0xvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDcgKzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBTdHJ1Y3R1cmVMb2Ms
CiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2MsCi0gICAgU3RhY2tQ
YXlsb2FkTG9jCisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAgIEpTTWFwQnVja2V0SW5kZXhMb2Ms
CisgICAgSlNNYXBHZXRMb2MsCisgICAgSlNNYXBIYXNMb2MKIH07CiAKIGNsYXNzIEhlYXBMb2Nh
dGlvbiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwOSw2ICszMDksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oSW5zdGFuY2VPZkN1c3RvbSwgTm9kZU11c3RHZW5lcmF0ZSB8
IE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgXAogICAgIG1hY3JvKElzSlNBcnJheSwgTm9kZVJl
c3VsdEJvb2xlYW4pIFwKKyAgICBtYWNybyhJc0pTTWFwLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAog
ICAgIG1hY3JvKElzRW1wdHksIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNVbmRl
ZmluZWQsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oSXNCb29sZWFuLCBOb2RlUmVz
dWx0Qm9vbGVhbikgXApAQCAtMzg4LDcgKzM4OSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBu
YW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51
bWVyYXRvckdlbmVyaWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAot
ICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKKyAgICBtYWNybyhUb0luZGV4
U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICAvKiBIYXNoaW5nIGZvciBKU01hcCAqLyBcCisg
ICAgbWFjcm8oSlNNYXBIYXNoLCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhHZXRKU01h
cEJ1Y2tldCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oTG9hZEZyb21KU01hcEJ1Y2tl
dCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSXNOb25FbXB0eUpTTWFwQnVja2V0LCBOb2Rl
UmVzdWx0Qm9vbGVhbikgXAogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxs
eSBpbmNyZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRo
ZSBzdWJzZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhl
IE5vZGVJZE1hc2spLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29u
c3RydWN0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNp
bmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtMTc3OSw2ICsx
NzgwLDI3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmEKICAgICBz
Y29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlKSwgc2xvdCk7CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25K
U01hcEhhc2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZShqc01hcEhhc2goZXhlYywg
SlNWYWx1ZTo6ZGVjb2RlKGlucHV0KSkpOworICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlc3VsdC5hc0ludDMyKCk7Cit9CisKK0pTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEhh
c2hNYXBCdWNrZXQqKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5tX21hcC0+ZmluZEJ1
Y2tldChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSk7CisgICAgaWYgKCFidWNrZXQpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAqYnVja2V0OworfQorCiBleHRlcm4gIkMi
IHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVm
ZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28g
d291bGRuJ3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSw5IEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQz
Ml90KTsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwSGFzaChFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSlNNYXBGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsK
KwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3Rh
dGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzQxLDYgKzc0MSwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAgLy8gRklYTUU6IHVzZSB0aGUgY2Fs
bHMgdmFsdWUgcHJvZmlsZXIgaGVyZS4KKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0J5
dGVjb2RlVG9wKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzTm9uRW1wdHlK
U01hcEJ1Y2tldDoKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAg
ICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAg
ICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC03ODQsNiArNzk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAg
ICAgICBjYXNlIEluc3RhbmNlT2ZDdXN0b206CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgorICAg
ICAgICBjYXNlIElzSlNNYXA6CiAgICAgICAgIGNhc2UgSXNFbXB0eToKICAgICAgICAgY2FzZSBJ
c1VuZGVmaW5lZDoKICAgICAgICAgY2FzZSBJc0Jvb2xlYW46CkBAIC04MDIsNiArODE0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY1N0cmluZ0lkZW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6
CiAgICAgICAgIGNhc2UgR2V0QnV0dGVyZmx5OgogICAgICAgICBjYXNlIEdldEluZGV4ZWRQcm9w
ZXJ0eVN0b3JhZ2U6CiAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNp
b24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw2ICsyNTgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5z
dGFuY2VPZkN1c3RvbToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CiAg
ICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xl
YW46CkBAIC0zNTUsNiArMzU2LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRl
VHlwZSYgc3QKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBQdXREeW5hbWljVmFy
OgogICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgorICAgIGNhc2UgSlNNYXBIYXNoOgorICAgIGNhc2Ug
R2V0SlNNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2Ug
SXNOb25FbXB0eUpTTWFwQnVja2V0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2Ug
Qm90dG9tVmFsdWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNFbnZpcm9u
bWVudFJlY29yZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVk
ZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNs
dWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgpA
QCAtNDcsNiArNDgsOCBAQAogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUg
IldhdGNoZG9nLmgiCiAKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTE0
MSw2ICsxNDQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKEVkZ2UgCiAg
ICAgICAgIAogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0
U3RvcmFnZToKKyAgICBjYXNlIERhdGFGb3JtYXRNYXBCdWNrZXQ6CiAgICAgY2FzZSBEYXRhRm9y
bWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgogICAgICAgICAvLyB0aGlzIHR5
cGUgY3VycmVudGx5IG5ldmVyIG9jY3VycwpAQCAtMTA1Niw2ICsxMDYwLDcgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50MwogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9v
bGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3Rv
cmFnZToKKyAgICBjYXNlIERhdGFGb3JtYXRNYXBCdWNrZXQ6CiAgICAgY2FzZSBEYXRhRm9ybWF0
SW50NTI6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RyaWN0SW50NTI6CiAgICAgICAgIERGR19DUkFT
SChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CkBAIC0x
Mjg2LDYgKzEyOTEsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxs
CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICBjYXNlIERhdGFGb3JtYXRNYXBCdWNr
ZXQ6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RyaWN0
SW50NTI6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCAi
QmFkIGRhdGEgZm9ybWF0Iik7CkBAIC0xMzYyLDYgKzEzNjgsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDoKICAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0U3RvcmFnZToKKyAgICBj
YXNlIERhdGFGb3JtYXRNYXBCdWNrZXQ6CiAgICAgY2FzZSBEYXRhRm9ybWF0SW50NTI6CiAgICAg
Y2FzZSBEYXRhRm9ybWF0U3RyaWN0SW50NTI6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFw
aCgpLCBtX2N1cnJlbnROb2RlLCAiQmFkIGRhdGEgZm9ybWF0Iik7CkBAIC00NjQ0LDYgKzQ2NTEs
MTMwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBJc0pTTWFwOiB7CisgICAgICAgIGNvbXBpbGVJc0pT
TWFwKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEpTTWFwSGFzaDog
eworICAgICAgICBjb21waWxlSlNNYXBIYXNoKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBrZXko
dGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaGFz
aCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBtYXNrKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3JhcnkgaW5kZXgodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBidWZmZXIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBidWNrZXQodGhpcyk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGhhc2hHUFIg
PSBoYXNoLmdwcigpOworICAgICAgICBHUFJSZWcgbWFwR1BSID0gbWFwLmdwcigpOworICAgICAg
ICBHUFJSZWcgbWFza0dQUiA9IG1hc2suZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRleEdQUiA9
IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgYnVmZmVyR1BSID0gYnVmZmVyLmdwcigpOwor
ICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAgICBHUFJSZWcg
a2V5R1BSID0ga2V5LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhtYXBHUFIsIE9CSkVDVF9PRkZTRVRPRihKU01hcCwgbV9tYXApKSwgYnVmZmVyR1BSKTsK
KyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwg
T0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsLCBtX2NhcGFjaXR5KSksIG1hc2tHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgT0JK
RUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsLCBtX2J1ZmZlcikpLCBidWZmZXJHUFIpOworICAgICAg
ICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIG1hc2tHUFIpOworICAgICAgICBtX2ppdC5t
b3ZlKGhhc2hHUFIsIGluZGV4R1BSKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwg
bG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBk
b25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGxvb3BBcm91bmQ7CisKKyAgICAgICAgbV9q
aXQuYW5kMzIobWFza0dQUiwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRpbWVzRWlnaHQpLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGJ1Y2tldEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBub3RQcmVzZW50SW5UYWJsZSA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVz
dGVkSW1tUHRyKEhhc2hNYXBJbXBsOjplbXB0eVZhbHVlKCkpKTsKKyAgICAgICAgbG9vcEFyb3Vu
ZC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAg
ICAgICBidWNrZXRHUFIsIFRydXN0ZWRJbW1QdHIoSGFzaE1hcEltcGw6OmRlbGV0ZWRWYWx1ZSgp
KSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNr
ZXRHUFIsIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBrZXkpKSwgYnVja2V0R1BSKTsK
KworICAgICAgICAvLyBQZXJmb3JtIE9iamVjdC5pcygpCisgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIpKTsg
Ly8gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVja2V0
IHdlIHdlcmUgbG9va2luZyBmb3IhCisgICAgICAgIGF1dG8gb25lSXNudENlbGwgPSBtX2ppdC5i
cmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoYnVja2V0R1BSKSk7CisgICAgICAgIC8vIGZpcnN0
IGlzIGEgY2VsbCBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoSlNWYWx1ZVJlZ3Moa2V5R1BSKSkpOworICAgICAgICAvLyBCb3RoIGFyZSBjZWxs
cyBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJ1Y2tldEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBl
KSkpOworICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KKyAgICAgICAgc2xv
d1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6RXF1YWwsCisgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhrZXlHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhlIGZp
cnN0IGlzIGEgc3RyaW5nLCBidXQgdGhlIHNlY29uZCBpcyBub3QsIHdlIGNvbnRpbnVlIHRvIGxv
b3AgYXJvdW5kLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisg
ICAgICAgIG9uZUlzbnRDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBkb25lIGEgNjQtYml0IGNvbXBhcmUgYXQgdGhpcyBwb2ludCwgc28gaWYgb25lIGlzIG5vdCBh
IG51bWJlciwgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBlcXVhbC4KKyAgICAgICAgbG9vcEFyb3Vu
ZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoYnVja2V0R1BSKSk7CisgICAgICAgIGxv
b3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGtleUdQUikpOworICAgICAg
ICAvLyBCb3RoIGFyZSBkZWZpbml0ZWx5IG51bWJlcnMuIElmIHdlIHNlZSBhIGRvdWJsZSwgd2Ug
Z28gdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoSWZOb3RJbnQzMihidWNrZXRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihrZXlHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGxv
b3BBcm91bmQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmbV9qaXQp
OworCisgICAgICAgIHNsb3dQYXRoQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSd2ZSBhbHJl
YWR5IGhhc2hlZCwgbGV0cyBqdXN0IHBhc3MgaW4gYWxsIHRoZSBzdGF0ZSB0byB0aGUgZmluZEJ1
Y2tldCBmdW5jdGlvbi4KKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU01hcEZpbmRC
dWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxs
UmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAg
ICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RQcmVzZW50SW5U
YWJsZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxs
cHRyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1h
cEJ1Y2tldFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgLy8gRklYTUU6IHJlbW92
ZSB0aGlzIGVkZ2UuCisgICAgICAgIC8vU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgTWFwQnVja2V0T3BlcmFuZCBidWNrZXQodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAg
ICAgIC8vR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQ
UiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBhdXRvIG5vdEJ1Y2tldCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQUik7CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0
LCB2YWx1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7
CisKKyAgICAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OiB7CisgICAgICAgIE1hcEJ1Y2tldE9wZXJhbmQg
YnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1faml0LmNv
bXBhcmVQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRHUFIsIFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2Fz
ZSBJc09iamVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDcgKzQxMSw3IEBAIFNp
bGVudFJlZ2lzdGVyU2F2ZVBsYW4gU3BlY3VsYXRpdmVKSVQ6OnMKICAgICAgICAgQVNTRVJUKGlu
Zm8uZ3ByKCkgPT0gc291cmNlKTsKICAgICAgICAgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFG
b3JtYXRJbnQzMikKICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmUzMlBheWxvYWQ7Ci0g
ICAgICAgIGVsc2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRDZWxsIHx8IHJlZ2lz
dGVyRm9ybWF0ID09IERhdGFGb3JtYXRTdG9yYWdlKQorICAgICAgICBlbHNlIGlmIChyZWdpc3Rl
ckZvcm1hdCA9PSBEYXRhRm9ybWF0Q2VsbCB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0
U3RvcmFnZSB8fCByZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0TWFwQnVja2V0KQogICAgICAg
ICAgICAgc3BpbGxBY3Rpb24gPSBTdG9yZVB0cjsKICAgICAgICAgZWxzZSBpZiAocmVnaXN0ZXJG
b3JtYXQgPT0gRGF0YUZvcm1hdEludDUyIHx8IHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRT
dHJpY3RJbnQ1MikKICAgICAgICAgICAgIHNwaWxsQWN0aW9uID0gU3RvcmU2NDsKQEAgLTQ2NSw3
ICs0NjUsNyBAQCBTaWxlbnRSZWdpc3RlclNhdmVQbGFuIFNwZWN1bGF0aXZlSklUOjpzCiAgICAg
ICAgICAgICBmaWxsQWN0aW9uID0gTG9hZDMyUGF5bG9hZDsKICNlbmRpZgogICAgICAgICB9Ci0g
ICAgfSBlbHNlIGlmIChyZWdpc3RlckZvcm1hdCA9PSBEYXRhRm9ybWF0U3RvcmFnZSkgeworICAg
IH0gZWxzZSBpZiAocmVnaXN0ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdFN0b3JhZ2UgfHwgcmVnaXN0
ZXJGb3JtYXQgPT0gRGF0YUZvcm1hdE1hcEJ1Y2tldCkgewogICAgICAgICBBU1NFUlQoaW5mby5n
cHIoKSA9PSBzb3VyY2UpOwogICAgICAgICBmaWxsQWN0aW9uID0gTG9hZFB0cjsKICAgICB9IGVs
c2UgaWYgKHJlZ2lzdGVyRm9ybWF0ID09IERhdGFGb3JtYXRJbnQ1MikgewpAQCAtOTQ3LDYgKzk0
NywzOCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTdG9yYWdlKEVkZ2UgCiAgICAgfQog
fQogCitHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxNYXBCdWNrZXQoRWRnZSBlZGdlKQorewor
ICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBlZGdlLT52aXJ0dWFsUmVnaXN0
ZXIoKTsKKyAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1
YWxSZWdpc3Rlcih2aXJ0dWFsUmVnaXN0ZXIpOworICAgIAorICAgIC8vIEZJWE1FOiByZWFzb24g
YWJvdXQgdGhpcyBjb2RlIG1vcmUsIHNpbmNlIHJpZ2h0IG5vdywgd2Ugd2lsbCBvbmx5IGV2ZXIg
ZW5jb3VudGVyIERhdGFGb3JtYXRNYXBCdWNrZXQuCisgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkpIHsKKyAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CisgICAgICAgIGlmIChpbmZv
LnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdE1hcEJ1Y2tldCkgeworICAgICAgICAgICAgZGF0
YUxvZygic3BpbGwgbWFwIGJ1Y2tldFxuIik7CisgICAgICAgICAgICBHUFJSZWcgZ3ByID0gYWxs
b2NhdGUoKTsKKyAgICAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3ByLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJTcGlsbGVkKTsKKyAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKKyAgICAgICAgICAgIGluZm8u
ZmlsbE1hcEJ1Y2tldCgqbV9zdHJlYW0sIGdwcik7CisgICAgICAgICAgICByZXR1cm4gZ3ByOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBNdXN0IGJlIGEgY2VsbDsgZmlsbCBpdCBh
cyBhIGNlbGwgYW5kIHRoZW4gcmV0dXJuIHRoZSBwb2ludGVyLgorICAgICAgICByZXR1cm4gZmls
bFNwZWN1bGF0ZUNlbGwoZWRnZSk7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIERhdGFGb3Jt
YXRNYXBCdWNrZXQ6IHsKKyAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CisgICAgICAg
IG1fZ3Bycy5sb2NrKGdwcik7CisgICAgICAgIHJldHVybiBncHI7CisgICAgfQorICAgICAgICAK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmlsbFNwZWN1bGF0ZUNlbGwoZWRnZSk7Cisg
ICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp1c2VDaGlsZHJlbihOb2RlKiBub2RlKQog
ewogICAgIGlmIChub2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpIHsKQEAgLTIwOTIsNiAr
MjEyNCw3IEBAIEdlbmVyYXRlZE9wZXJhbmRUeXBlIFNwZWN1bGF0aXZlSklUOjpjaGUKIAogICAg
IHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0U3Rv
cmFnZToKKyAgICBjYXNlIERhdGFGb3JtYXRNYXBCdWNrZXQ6CiAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgpAQCAtMzYx
Myw2ICszNjQ2LDk1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTQXJyYXkoTm8K
ICAgICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlSXNKU01hcChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChu
b2RlLT5vcCgpID09IElzSlNNYXApOworICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gQ2VsbFVzZSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGls
ZXI6OkVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpT
TWFwVHlwZSksCisgICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAgICBibGVzc0Jvb2xlYW4o
cmVzdWx0R1BSKTsKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0
KHRoaXMpOworCisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3Mo
KTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncyk7CisK
KyAgICBtX2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoSlNNYXBUeXBlKSwKKyAgICAgICAgcmVz
dWx0R1BSKTsKKyAgICBibGVzc0Jvb2xlYW4ocmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsK
KyAgICBtb3ZlRmFsc2VUbyhyZXN1bHRHUFIpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUpTTWFwSGFzaChOb2RlKiBub2RlKQoreworICAgIC8vIEZJWE1F
OiB3ZSBhcmUgY3VycmVudGx5IHNsb3dlciBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHRvIGNh
bGwgaW50byBDIHRvIGhhc2ggdGhlIHN0cmluZy4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBhIHN0
cmluZyBhcmd1bWVudCBmYXN0IHBhdGggdGhhdCBhdm9pZHMgY2hlY2tzIQorCisgICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gSlNNYXBIYXNoKTsKKworICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQu
Z3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBHUFJSZWcg
dGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc3Ry
YWlnaHRIYXNoOworICAgIGF1dG8gaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc3Ry
YWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgp
KSwgcmVzdWx0R1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSks
IHJlc3VsdEdQUik7CisgICAgbV9qaXQudXJzaGlmdDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoNiksIHJlc3VsdEdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgYXV0byBkb25lMiA9
IG1faml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgc3RyYWln
aHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUikpOworICAgIHN0
cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhpbnB1dEdQ
UikpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgIHN0cmFpZ2h0
SGFzaC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsK
KyAgICBtX2ppdC5qc01hcEhhc2gocmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICBhdXRvIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2lsZW50
U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkpTTWFwSGFzaCwgcmVzdWx0R1BSLCBpbnB1dEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBkb25l
Mi5saW5rKCZtX2ppdCk7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgaW50MzJSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzUmVn
RXhwT2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MywxNCArOTMs
MTUgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgogI2lmIFVTRShK
U1ZBTFVFNjQpCiAgICAgZW51bSBTcGlsbE9yZGVyIHsKLSAgICAgICAgU3BpbGxPcmRlckNvbnN0
YW50ID0gMSwgLy8gbm8gc3BpbGwsIGFuZCBjaGVhcCBmaWxsCi0gICAgICAgIFNwaWxsT3JkZXJT
cGlsbGVkICA9IDIsIC8vIG5vIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJKUyAgICAgICA9IDQs
IC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJDZWxsICAgICA9IDQsIC8vIG5lZWRz
IHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJTdG9yYWdlICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0g
ICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKLSAg
ICAgICAgU3BpbGxPcmRlckJvb2xlYW4gID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAotICAg
ICAgICBTcGlsbE9yZGVyRG91YmxlICAgPSA2LCAvLyBuZWVkcyBzcGlsbCBhbmQgY29udmVydAor
ICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQgID0gMSwgLy8gbm8gc3BpbGwsIGFuZCBjaGVhcCBm
aWxsCisgICAgICAgIFNwaWxsT3JkZXJTcGlsbGVkICAgPSAyLCAvLyBubyBzcGlsbAorICAgICAg
ICBTcGlsbE9yZGVySlMgICAgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxP
cmRlckNlbGwgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCisgICAgICAgIFNwaWxsT3JkZXJTdG9y
YWdlICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVyTWFwQnVja2V0ID0g
NCwgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlckludGVnZXIgICA9IDUsIC8vIG5l
ZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4gICA9IDUsIC8vIG5l
ZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgICA9IDYsIC8vIG5l
ZWRzIHNwaWxsIGFuZCBjb252ZXJ0CiAgICAgfTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAg
ICAgZW51bSBTcGlsbE9yZGVyIHsKQEAgLTE0Miw2ICsxNDMsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBmaWxsSlNWYWx1ZShFZGdlLCBHUFJSZWcmLCBHUFJSZWcmLCBGUFJSZWcmKTsKICNlbmRpZgog
ICAgIEdQUlJlZyBmaWxsU3RvcmFnZShFZGdlKTsKKyAgICBHUFJSZWcgZmlsbE1hcEJ1Y2tldChF
ZGdlKTsKIAogICAgIC8vIGxvY2sgYW5kIHVubG9jayBHUFIgJiBGUFIgcmVnaXN0ZXJzLgogICAg
IHZvaWQgbG9jayhHUFJSZWcgcmVnKQpAQCAtNTE1LDExICs1MTcsMTIgQEAgcHVibGljOgogCiAg
ICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnJlZ2lzdGVyRm9ybWF0KCk7CiAg
ICAgICAgIHN3aXRjaCAoc3BpbGxGb3JtYXQpIHsKKyAgICAgICAgY2FzZSBEYXRhRm9ybWF0TWFw
QnVja2V0OgogICAgICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdlOiB7CiAgICAgICAgICAgICAv
LyBUaGlzIGlzIHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUgLSBhcyBpbiBpdCdz
IG5vdCB2aXNpYmxlIHRvIEpTCiAgICAgICAgICAgICAvLyBjb2RlLgogICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkp
OwotICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFGb3JtYXRT
dG9yYWdlKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBzcGls
bEZvcm1hdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtNzU2LDYgKzc1
OSw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mQ3VzdG9tKE5vZGUqKTsK
IAogICAgIHZvaWQgY29tcGlsZUlzSlNBcnJheShOb2RlKik7CisgICAgdm9pZCBjb21waWxlSXNK
U01hcChOb2RlKik7CisgICAgdm9pZCBjb21waWxlSlNNYXBIYXNoKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVJc1JlZ0V4cE9iamVjdChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNUeXBlZEFy
cmF5VmlldyhOb2RlKik7CiAKQEAgLTkxMSw2ICs5MTYsMTYgQEAgcHVibGljOgogICAgICAgICBH
ZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rlcih2
aXJ0dWFsUmVnaXN0ZXIpOwogICAgICAgICBpbmZvLmluaXRTdG9yYWdlKG5vZGUsIG5vZGUtPnJl
ZkNvdW50KCksIHJlZyk7CiAgICAgfQorICAgIHZvaWQgbWFwQnVja2V0UmVzdWx0KEdQUlJlZyBy
ZWcsIE5vZGUqIG5vZGUsIFVzZUNoaWxkcmVuTW9kZSBtb2RlID0gQ2FsbFVzZUNoaWxkcmVuKQor
ICAgIHsKKyAgICAgICAgaWYgKG1vZGUgPT0gQ2FsbFVzZUNoaWxkcmVuKQorICAgICAgICAgICAg
dXNlQ2hpbGRyZW4obm9kZSk7CisgICAgICAgIAorICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmly
dHVhbFJlZ2lzdGVyID0gbm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIG1fZ3Bycy5y
ZXRhaW4ocmVnLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJNYXBCdWNrZXQpOworICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvRnJvbVZpcnR1YWxSZWdpc3Rl
cih2aXJ0dWFsUmVnaXN0ZXIpOworICAgICAgICBpbmZvLmluaXRNYXBCdWNrZXQobm9kZSwgbm9k
ZS0+cmVmQ291bnQoKSwgcmVnKTsKKyAgICB9CiAgICAgdm9pZCBkb3VibGVSZXN1bHQoRlBSUmVn
IHJlZywgTm9kZSogbm9kZSwgVXNlQ2hpbGRyZW5Nb2RlIG1vZGUgPSBDYWxsVXNlQ2hpbGRyZW4p
CiAgICAgewogICAgICAgICBpZiAobW9kZSA9PSBDYWxsVXNlQ2hpbGRyZW4pCkBAIC0xMTk3LDYg
KzEyMTIsMTEgQEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9w
ZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSVpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlZ09wMSwgVW5p
cXVlZFN0cmluZ0ltcGwqIGlkZW50T3AyLCBpbnQzMl90IG9wMywgR1BSUmVnIHJlZ09wNCkKICAg
ICB7CkBAIC0xNjcxLDYgKzE2OTEsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRP
cGVyYXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNp
Z25lZCBhcmcyLCB1bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMy
KGFyZzMpKTsKQEAgLTI5NzcsNiArMzAwMyw1MyBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX2dw
ck9ySW52YWxpZDsKIH07CiAKK2NsYXNzIE1hcEJ1Y2tldE9wZXJhbmQgeworcHVibGljOgorICAg
IGV4cGxpY2l0IE1hcEJ1Y2tldE9wZXJhbmQoU3BlY3VsYXRpdmVKSVQqIGppdCwgRWRnZSBlZGdl
KQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX2VkZ2UoZWRnZSkKKyAgICAgICAg
LCBtX2dwck9ySW52YWxpZChJbnZhbGlkR1BSUmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
aml0KTsKKyAgICAgICAgQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UgfHwgZWRn
ZS51c2VLaW5kKCkgPT0gS25vd25DZWxsVXNlKTsKKyAgICAgICAgaWYgKGppdC0+aXNGaWxsZWQo
bm9kZSgpKSkKKyAgICAgICAgICAgIGdwcigpOworICAgIH0KKyAgICAKKyAgICB+TWFwQnVja2V0
T3BlcmFuZCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9ncHJPckludmFsaWQgIT0gSW52YWxp
ZEdQUlJlZyk7CisgICAgICAgIG1faml0LT51bmxvY2sobV9ncHJPckludmFsaWQpOworICAgIH0K
KyAgICAKKyAgICBFZGdlIGVkZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWRn
ZTsKKyAgICB9CisgICAgCisgICAgTm9kZSogbm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZWRnZSgpLm5vZGUoKTsKKyAgICB9CisgICAgCisgICAgR1BSUmVnIGdwcigpCisgICAg
eworICAgICAgICBpZiAobV9ncHJPckludmFsaWQgPT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAg
ICAgIG1fZ3ByT3JJbnZhbGlkID0gbV9qaXQtPmZpbGxNYXBCdWNrZXQoZWRnZSgpKTsKKyAgICAg
ICAgcmV0dXJuIG1fZ3ByT3JJbnZhbGlkOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZSgpCisg
ICAgeworICAgICAgICBtX2ppdC0+dXNlKG5vZGUoKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7CisgICAgRWRnZSBtX2VkZ2U7CisgICAgR1BSUmVn
IG1fZ3ByT3JJbnZhbGlkOworfTsKKwogCiAvLyA9PT0gVGVtcG9yYXJpZXMgPT09CiAvLwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICsz
Miw3IEBACiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RI
ZWFwLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC0xMDIsNyArMTAzLDEyIEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJ
bmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJl
X2dsb2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1h
Y3JvKFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwK
LSAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSkKKyAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTTWFwX0hhc2hNYXBJbXBsLCBPQkpFQ1Rf
T0ZGU0VUT0YoSlNNYXAsIG1fbWFwKSkgXAorICAgIG1hY3JvKEhhc2hNYXBJbXBsX2NhcGFjaXR5
LCBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGwsIG1fY2FwYWNpdHkpKSBcCisgICAgbWFjcm8o
SGFzaE1hcEltcGxfYnVmZmVyLCAgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsLCBtX2J1ZmZl
cikpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBPQkpFQ1RfT0ZGU0VUT0YoSGFz
aE1hcEJ1Y2tldCwgdmFsdWUpKSBcCisgICAgbWFjcm8oSGFzaE1hcEJ1Y2tldF9rZXksIE9CSkVD
VF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBrZXkpKQogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVY
RURfQUJTVFJBQ1RfSEVBUChtYWNybykgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9y
YWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDExIEBAIGlu
bGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFRocm93UmVm
ZXJlbmNlRXJyb3I6CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIElzSlNBcnJheToK
KyAgICBjYXNlIElzSlNNYXA6CisgICAgY2FzZSBKU01hcEhhc2g6CisgICAgY2FzZSBHZXRKU01h
cEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05vbkVt
cHR5SlNNYXBCdWNrZXQ6CiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6
CiAgICAgY2FzZSBJc0Jvb2xlYW46CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYg
KzcwLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmF0b3JG
dW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAi
SlNNYXAuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJTY29wZWRB
cmd1bWVudHMuaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgpAQCAtODk4LDYg
Kzg5OSwyMSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElzSlNBcnJheToKICAgICAgICAgICAg
IGNvbXBpbGVJc0pTQXJyYXkoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElz
SlNNYXA6CisgICAgICAgICAgICBjb21waWxlSXNKU01hcCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICAgICAgY29tcGlsZUpTTWFwSGFzaCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAg
ICAgICAgICBjb21waWxlR2V0SlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlTG9hZEZy
b21KU01hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25F
bXB0eUpTTWFwQnVja2V0OgorICAgICAgICAgICAgY29tcGlsZUlzTm9uRW1wdHlKU01hcEJ1Y2tl
dCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAg
ICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjMwNyw2ICs2
MzIzLDI0OSBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwg
bm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZvaWQgY29tcGlsZUpT
TWFwSGFzaCgpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBzdHJhaWdodEhhc2ggPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBpc051bWJlckNhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBpc1N0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBub25FbXB0eVN0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUt
PmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGwpKTsKKworICAg
ICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlz
U3RyaW5nQ2FzZSk7CisgICAgICAgIExWYWx1ZSBpc1N0cmluZyA9IG1fb3V0LmVxdWFsKG1fb3V0
LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLCBtX291
dC5jb25zdEludDMyKFN0cmluZ1R5cGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAg
ICAgICAgaXNTdHJpbmcsIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNo
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBub25FbXB0eVN0cmlu
Z0Nhc2UpOworICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIodmFsdWUs
IG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBtX291dC5lcXVhbChzdHJpbmdJbXBsLCBtX291dC5jb25zdEludFB0cigwKSksIHJhcmVs
eShzbG93Q2FzZSksIHVzdWFsbHkobm9uRW1wdHlTdHJpbmdDYXNlKSk7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm9uRW1wdHlTdHJpbmdDYXNlLCBub3RDZWxsKTsKKyAgICAgICAgTFZhbHVl
IGhhc2ggPSBtX291dC5sU2hyKG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmlu
Z0ltcGxfaGFzaEFuZEZsYWdzKSwgbV9vdXQuY29uc3RJbnQzMig2KSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNoKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2gsIG1fb3V0LmNvbnN0SW50MzIo
MCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjb250aW51YXRpb24p
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsLCBpc051bWJlckNhc2UpOworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc051bWJlcih2YWx1ZSksIHVuc3VyZShp
c051bWJlckNhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oaXNOdW1iZXJDYXNlLCBzdHJhaWdodEhhc2gpOworICAgICAgICBtX291dC5icmFuY2go
CisgICAgICAgICAgICBpc0ludDMyKHZhbHVlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCksIHVuc3Vy
ZShzbG93Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmFpZ2h0SGFzaCwgc2xv
d0Nhc2UpOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgICAgICBMVmFsdWUg
a2V5ID0gdmFsdWU7CisgICAgICAgIExWYWx1ZSB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0g
bV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzIpKTsKKyAgICAgICAgdGVtcCA9IG1f
b3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7Cisg
ICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAg
ICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigyMikpOworICAgICAg
ICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5
IDw8IDEzKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0
ZW1wLCBtX291dC5jb25zdEludDMyKDEzKSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3Qo
dGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBr
ZXkgXj0gKGtleSA+PiA4KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1f
b3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMig4KSk7CisgICAgICAgIGtleSA9IG1fb3V0
LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICAg
ICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25z
dEludDMyKDMpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAg
IC8vIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVt
cCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxNSkpOworICAgICAgICBrZXkg
PSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDI3
KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBt
X291dC5jb25zdEludDMyKDI3KSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7
CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0g
KGtleSA+PiAzMSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5s
U2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0
WG9yKGtleSwgdGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmNhc3RUb0ludDMyKGtleSk7CisK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihrZXkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dS
ZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICB2bUNhbGwoSW50MzIsIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25KU01hcEhhc2gpLCBtX2NhbGxGcmFtZSwgdmFsdWUpKTsKKyAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRJbnQzMihtX291dC5waGkoSW50MzIs
IGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQsIG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCkpOworICAg
IH0KKworICAgIHZvaWQgY29tcGlsZUdldEpTTWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExC
YXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGxvb3BBcm91bmQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBz
bG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFByZXNl
bnRJblRhYmxlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1w
dHlWYWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdERlbGV0
ZWRWYWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJpdEVx
dWFsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5Tm90
Q2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlz
Q2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVDZWxs
cyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzU3Ry
aW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNO
dW1iZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJlTnVt
YmVycyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlz
SW50MzIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1ZSBtYXAgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUga2V5ID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxk
MygpKTsKKworICAgICAgICBMVmFsdWUgaGFzaE1hcEltcGwgPSBtX291dC5sb2FkUHRyKG1hcCwg
bV9oZWFwcy5KU01hcF9IYXNoTWFwSW1wbCk7CisgICAgICAgIExWYWx1ZSBidWZmZXIgPSBtX291
dC5sb2FkUHRyKGhhc2hNYXBJbXBsLCBtX2hlYXBzLkhhc2hNYXBJbXBsX2J1ZmZlcik7CisgICAg
ICAgIExWYWx1ZSBtYXNrID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihoYXNoTWFwSW1wbCwgbV9o
ZWFwcy5IYXNoTWFwSW1wbF9jYXBhY2l0eSksIG1fb3V0LmludDMyT25lKTsKKworICAgICAgICBW
YWx1ZUZyb21CbG9jayBpbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGhhc2gpOworICAgICAgICBt
X291dC5qdW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhsb29wU3RhcnQsIG5vdEVtcHR5VmFsdWUpOworICAgICAgICBMVmFsdWUg
dW5tYXNrZWRJbmRleCA9IG1fb3V0LnBoaShJbnQzMiwgaW5kZXhTdGFydCk7CisgICAgICAgIExW
YWx1ZSBpbmRleCA9IG1fb3V0LmJpdEFuZChtYXNrLCB1bm1hc2tlZEluZGV4KTsKKyAgICAgICAg
TFZhbHVlIGhhc2hNYXBCdWNrZXQgPSBtX291dC5sb2FkNjQobV9vdXQuYmFzZUluZGV4KG1faGVh
cHMucHJvcGVydGllcy5hdEFueU51bWJlcigpLCBidWZmZXIsIG1fb3V0Lnplcm9FeHQoaW5kZXgs
IEludDY0KSwgU2NhbGVFaWdodCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBidWNrZXRSZXN1
bHQgPSBtX291dC5hbmNob3IoaGFzaE1hcEJ1Y2tldCk7CisgICAgICAgIG1fb3V0LmJyYW5jaCht
X291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291dC5jb25zdEludFB0cihIYXNoTWFwSW1wbDo6
ZW1wdHlWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobm90UHJlc2VudEluVGFibGUpLCB1
bnN1cmUobm90RW1wdHlWYWx1ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5
VmFsdWUsIG5vdERlbGV0ZWRWYWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVh
bChoYXNoTWFwQnVja2V0LCBtX291dC5jb25zdEludFB0cihIYXNoTWFwSW1wbDo6ZGVsZXRlZFZh
bHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKG5vdERlbGV0
ZWRWYWx1ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERlbGV0ZWRWYWx1ZSwgbm90
Qml0RXF1YWwpOworICAgICAgICBMVmFsdWUgYnVja2V0S2V5ID0gbV9vdXQubG9hZDY0KGhhc2hN
YXBCdWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF9rZXkpOworICAgICAgICAvLyBQZXJmb3Jt
IE9iamVjdC5pcygpCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tl
dEtleSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEJpdEVx
dWFsKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWwsIGJ1Y2tldEtleUlz
Q2VsbCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYnVja2V0S2V5KSwKKyAgICAgICAg
ICAgIHVuc3VyZShidWNrZXRLZXlJc0NlbGwpLCB1bnN1cmUoYnVja2V0S2V5Tm90Q2VsbCkpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwgYm90aEFyZUNlbGxzKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChrZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJv
dGhBcmVDZWxscyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oYm90aEFyZUNlbGxzLCBidWNrZXRLZXlJc1N0cmluZyk7CisgICAgICAgIG1fb3V0LmJyYW5j
aChpc1N0cmluZyhidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzU3Ry
aW5nKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNr
ZXRLZXlJc1N0cmluZywgYnVja2V0S2V5Tm90Q2VsbCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChp
c1N0cmluZyhrZXkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BB
cm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlOb3RDZWxsLCBidWNr
ZXRLZXlJc051bWJlcik7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihidWNrZXRL
ZXkpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUoYnVja2V0S2V5SXNO
dW1iZXIpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc051bWJlciwgYm90
aEFyZU51bWJlcnMpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1iZXIoa2V5KSwKKyAg
ICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKGJvdGhBcmVOdW1iZXJzKSk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm90aEFyZU51bWJlcnMsIGJ1Y2tldEtleUlzSW50MzIp
OworICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihidWNrZXRLZXkpLAorICAgICAgICAg
ICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGJ1Y2tldEtleUlzSW50MzIpKTsKKworICAgICAg
ICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0ludDMyLCBsb29wQXJvdW5kKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKGlzTm90SW50MzIoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0
aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcEFy
b3VuZCwgc2xvd1BhdGgpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHVubWFza2Vk
SW5kZXgsIG1fb3V0LmFuY2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSkpOwor
ICAgICAgICBtX291dC5qdW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c2xvd1BhdGgsIG5vdFByZXNlbnRJblRhYmxlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xv
d1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksIG1fb3V0Lm9w
ZXJhdGlvbihvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQpLCBtX2NhbGxGcmFtZSwgbWFwLCBrZXkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG5vdFByZXNlbnRJblRhYmxlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBub3RQcmVzZW50UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50UHRy
KDApKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRNYXBCdWNrZXQo
bV9vdXQucGhpKHBvaW50ZXJUeXBlKCksIGJ1Y2tldFJlc3VsdCwgc2xvd1BhdGhSZXN1bHQsIG5v
dFByZXNlbnRSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVMb2FkRnJvbUpTTWFw
QnVja2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBtYXBCdWNrZXQgPSBsb3dNYXBCdWNrZXQo
bV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaGFzQnVja2V0ID0gbV9vdXQu
bmV3QmxvY2soKTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBub0J1Y2tldFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgp
KSkpOworCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChtYXBCdWNrZXQsIG1fb3V0
LmNvbnN0SW50UHRyKDApKSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1
cmUoaGFzQnVja2V0KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5h
cHBlbmRUbyhoYXNCdWNrZXQsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGJ1Y2tldFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5sb2FkNjQobWFwQnVja2V0LCBtX2hl
YXBzLkhhc2hNYXBCdWNrZXRfdmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwor
ICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LnBoaShJbnQ2NCwgbm9CdWNrZXRSZXN1bHQsIGJ1Y2tl
dFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUlzTm9uRW1wdHlKU01hcEJ1Y2tl
dCgpCisgICAgeworICAgICAgICBMVmFsdWUgYnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0
LCBtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKKyAg
ICB9CisKKyAgICB2b2lkIGNvbXBpbGVJc0pTTWFwKCkKKyAgICB7CisgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBDZWxsVXNlKSB7CisgICAgICAgICAgICBMVmFsdWUg
dmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5lcXVhbCgKKyAgICAgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1
ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgICAgICBtX291dC5j
b25zdEludDMyKEpTTWFwVHlwZSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFVu
dHlwZWRVc2UpOworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdENlbGxSZXN1bHQgPSBtX291dC5hbmNob3Io
bV9vdXQuYm9vbGVhbkZhbHNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAg
aXNDZWxsKHZhbHVlLCBwcm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2Vs
bENhc2UpLCB1bnN1cmUoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFz
dE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBjb250aW51YXRpb24pOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBjZWxsUmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmVxdWFsKAor
ICAgICAgICAgICAgbV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5
cGVJbmZvVHlwZSksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKEpTTWFwVHlwZSkpKTsK
KyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBo
aShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOworICAgIH0KKwogICAgIHZvaWQg
Y29tcGlsZUlzT2JqZWN0T3JOdWxsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYyk7CkBAIC0xMDAxMSw2ICsxMDI3MCwxNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRTdG9y
YWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
KworICAgIExWYWx1ZSBsb3dNYXBCdWNrZXQoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTG93
ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fbWFwQnVja2V0VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7
CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52
YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7
CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvSW50MzIoRWRn
ZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpAQCAtMTE0MTAsNiArMTE2ODAsMTAgQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5v
ZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBCdWNr
ZXQoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9tYXBCdWNrZXRW
YWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7Cisg
ICAgfQogICAgIHZvaWQgc2V0RG91YmxlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKICAgICB7
CiAgICAgICAgIG1fZG91YmxlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVl
LCBtX2hpZ2hCbG9jaykpOwpAQCAtMTE0NDMsNiArMTE3MTcsMTAgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7CiAgICAgfQorICAgIHZvaWQgc2V0
TWFwQnVja2V0KExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX25v
ZGUsIHZhbHVlKTsKKyAgICB9CiAgICAgdm9pZCBzZXREb3VibGUoTFZhbHVlIHZhbHVlKQogICAg
IHsKICAgICAgICAgc2V0RG91YmxlKG1fbm9kZSwgdmFsdWUpOwpAQCAtMTE2MjYsNiArMTE5MDQs
NyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fanNW
YWx1ZVZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Jvb2xl
YW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdl
VmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fbWFwQnVja2V0
VmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fZG91YmxlVmFs
dWVzOwogICAgIAogICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBwcmV2ZW50cyBC
MyBmcm9tIGhhdmluZyB0byBkbyBDU0Ugb24gbG9hZGluZyBvZiBhcmd1bWVudHMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lv
biAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNiw2ICs2MjYsNTAgQEAgdm9pZCBBc3NlbWJseUhlbHBl
cnM6OmVtaXREdW1iVmlydHVhbENhbAogICAgICAgICB9KTsKIH0KIAordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmpzTWFwSGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKQor
eworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+KGtl
eSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2Ny
YXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlucHV0
LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7Cisg
ICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7Cisg
ICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEzKSwg
c2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQp
OworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOwor
ICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0
Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0LCBz
Y3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAgIGFk
ZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92
ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwg
MjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gs
IGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwgc2Ny
YXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAgIHhv
cjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1
bHQpCisgICAgdm9pZCogbWFzayA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihVSU5UX01BWCkpOworICAgIGFuZDY0KFRydXN0ZWRJbW1QdHIobWFzayksIGlucHV0
QW5kUmVzdWx0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6
Tm9uZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRU
eXBlKCkpKTsKICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQganNNYXBIYXNoKEdQUlJlZyBp
bnB1dEFuZFJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gpOwogICAgIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBt
X3ZtOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMDUwMzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2MSw2ICsyNjEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAg
ICAgIERFRklORV9PUChvcF9pc19udW1iZXIpCiAgICAgICAgIERFRklORV9PUChvcF9pc19zdHJp
bmcpCiAgICAgICAgIERFRklORV9PUChvcF9pc19qc2FycmF5KQorICAgICAgICBERUZJTkVfT1Ao
b3BfaXNfanNtYXApCiAgICAgICAgIERFRklORV9PUChvcF9pc19vYmplY3QpCiAgICAgICAgIERF
RklORV9PUChvcF9qZXFfbnVsbCkKICAgICAgICAgREVGSU5FX09QKG9wX2pmYWxzZSkKQEAgLTM1
MSw2ICszNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAg
ICAgICAKICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZSkK
ICAgICAgICAgREVGSU5FX09QKG9wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKQorICAgICAgICBE
RUZJTkVfT1Aob3BfanNtYXBfaGFzaCkKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIzLDYgKzUyMyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB2b2lkIGVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9pc19zdHJpbmcoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2lzX2pzYXJyYXkoSW5zdHJ1Y3Rpb24qKTsKKyAgICAgICAgdm9pZCBlbWl0X29wX2lzX2pz
bWFwKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pc19vYmplY3QoSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2plcV9udWxsKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qKTsKQEAgLTYwNSw2ICs2MDYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX3RvX2luZGV4X3N0cmlu
ZyhJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbChJbnN0cnVjdGlvbiopOworICAgICAgICB2b2lkIGVtaXRfb3BfanNtYXBf
aGFzaChJbnN0cnVjdGlvbiopOwogCiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYWRkKEluc3Ry
dWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwogICAgICAgICB2b2lk
IGVtaXRTbG93X29wX2JpdGFuZChJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDYgKzI3OCw2MSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pc19qc2FycmF5KEluc3RydWN0aW9uCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwogfQogCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19qc21hcChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7CisgICAgSnVtcCBp
c05vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKworICAgIGNvbXBhcmU4KEVx
dWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKEpTTWFwVHlwZSksIHJlZ1QwKTsKKyAgICBlbWl0VGFnQm9vbChyZWdUMCk7CisgICAg
SnVtcCBkb25lID0ganVtcCgpOworCisgICAgaXNOb3RDZWxsLmxpbmsodGhpcyk7CisgICAgbW92
ZShUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlZ1QwKTsKKworICAgIGRvbmUubGluayh0aGlz
KTsKKyAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Cit9CisKK3ZvaWQgSklUOjplbWl0
X29wX2pzbWFwX2hhc2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworCisgICAgSnVtcExpc3Qgc3RyYWln
aHRIYXNoOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKKyAgICBK
dW1wIGlzTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOworICAgIEp1bXBMaXN0
IHNsb3dQYXRoOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoYnJhbmNoOChOb3RFcXVhbCwgQWRk
cmVzcyhyZWdUMCwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihT
dHJpbmdUeXBlKSkpOworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNTdHJpbmc6Om9mZnNl
dE9mVmFsdWUoKSksIHJlZ1QwKTsKKyAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMCkpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBTdHJpbmdJbXBsOjpmbGFn
c09mZnNldCgpKSwgcmVnVDApOworICAgIHVyc2hpZnQzMihUcnVzdGVkSW1tMzIoNiksIHJlZ1Qw
KTsKKyAgICBzbG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIHJlZ1QwKSk7CisgICAg
YXV0byBqdW1wVG9Cb3hpbmcgPSBqdW1wKCk7CisKKyAgICBpc05vdENlbGwubGluayh0aGlzKTsK
KyAgICBzdHJhaWdodEhhc2guYXBwZW5kKGJyYW5jaElmTm90TnVtYmVyKHJlZ1QwKSk7CisgICAg
c3RyYWlnaHRIYXNoLmFwcGVuZChicmFuY2hJZkludDMyKEpTVmFsdWVSZWdzKHJlZ1QwKSkpOwor
ICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOworCisgICAgc3RyYWlnaHRIYXNoLmxpbmsodGhp
cyk7CisKKyAgICBqc01hcEhhc2gocmVnVDAsIHJlZ1QxKTsKKyAgICBqdW1wVG9Cb3hpbmcubGlu
ayh0aGlzKTsKKyAgICBib3hJbnQzMihyZWdUMCwgSlNWYWx1ZVJlZ3MocmVnVDApKTsKKyAgICBl
bWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7CisgICAgSnVtcCBkb25lID0ganVtcCgpOworCisg
ICAgc2xvd1BhdGgubGluayh0aGlzKTsKKyAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxs
KHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX2pzbWFwX2hhc2gpOworICAgIHNs
b3dQYXRoQ2FsbC5jYWxsKCk7CisgICAgZG9uZS5saW5rKHRoaXMpOworfQorCiB2b2lkIEpJVDo6
ZW1pdF9vcF9pc19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAg
ICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDUwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTk0LDYgKzE5NCw3IEBAIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGUKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0
WlopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBK
U0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50
MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VK
c2NJKShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYg
SlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAq
RF9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9O
ICpEX0pJVE9wZXJhdGlvbl9HKShKU0dsb2JhbE9iamVjdCopOwogdHlwZWRlZiBkb3VibGUgKEpJ
VF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0REKShkb3VibGUsIGRvdWJsZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAkocmV2aXNpb24gMjA1MDMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE2MCw2ICsxNjAsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZN
JiB2bSkKICAgICBTVEFUSUNfQVNTRVJUKEZpbmFsT2JqZWN0VHlwZSA9PSAyMSk7CiAgICAgU1RB
VElDX0FTU0VSVChKU0Z1bmN0aW9uVHlwZSA9PSAyMyk7CiAgICAgU1RBVElDX0FTU0VSVChBcnJh
eVR5cGUgPT0gMjkpOworICAgIFNUQVRJQ19BU1NFUlQoSlNNYXBUeXBlID09IDExNyk7CiAgICAg
U1RBVElDX0FTU0VSVChJbnQ4QXJyYXlUeXBlID09IDEwMCk7CiAgICAgU1RBVElDX0FTU0VSVChJ
bnQxNkFycmF5VHlwZSA9PSAxMDEpOwogICAgIFNUQVRJQ19BU1NFUlQoSW50MzJBcnJheVR5cGUg
PT0gMTAyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5MSw3ICsxNDkxLDYg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2RlYnVnKQogICAgIExMSU5UX0JFR0lO
KCk7CiAgICAgaW50IGRlYnVnSG9va0lEID0gcGNbMV0udS5vcGVyYW5kOwogICAgIHZtLmludGVy
cHJldGVyLT5kZWJ1ZyhleGVjLCBzdGF0aWNfY2FzdDxEZWJ1Z0hvb2tJRD4oZGVidWdIb29rSUQp
KTsKLSAgICAKICAgICBMTElOVF9FTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTk5LDIwICsxMTk5LDEwOCBAQCBfbGxpbnRf
b3BfaXNfc3RyaW5nOgogICAgIHN0b3JlcSBWYWx1ZUZhbHNlLCBbY2ZyLCB0MiwgOF0KICAgICBk
aXNwYXRjaCgzKQogCi0KLV9sbGludF9vcF9pc19qc2FycmF5OgotICAgIHRyYWNlRXhlY3V0aW9u
KCkKK21hY3JvIGVtaXRJc0NlcnRhaW5KU1R5cGUodHlwZSkKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMiwgdDEpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQogICAgIGxvYWRD
b25zdGFudE9yVmFyaWFibGUodDEsIHQwKQotICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAub3BJc0pT
QXJyYXlOb3RDZWxsCi0gICAgY2JlcSBKU0NlbGw6Om1fdHlwZVt0MF0sIEFycmF5VHlwZSwgdDEK
KyAgICBidHFueiB0MCwgdGFnTWFzaywgLmpzVHlwZU5vdENlbGwKKyAgICBjYmVxIEpTQ2VsbDo6
bV90eXBlW3QwXSwgdHlwZSwgdDEKICAgICBvcnEgVmFsdWVGYWxzZSwgdDEKICAgICBzdG9yZXEg
dDEsIFtjZnIsIHQyLCA4XQogICAgIGRpc3BhdGNoKDMpCi0ub3BJc0pTQXJyYXlOb3RDZWxsOgor
LmpzVHlwZU5vdENlbGw6CiAgICAgc3RvcmVxIFZhbHVlRmFsc2UsIFtjZnIsIHQyLCA4XQogICAg
IGRpc3BhdGNoKDMpCitlbmQKKworX2xsaW50X29wX2lzX2pzYXJyYXk6CisgICAgdHJhY2VFeGVj
dXRpb24oKQorICAgIGVtaXRJc0NlcnRhaW5KU1R5cGUoQXJyYXlUeXBlKQorCisKK19sbGludF9v
cF9pc19qc21hcDoKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgZW1pdElzQ2VydGFpbkpTVHlw
ZShKU01hcFR5cGUpCisKK19sbGludF9vcF9qc21hcF9oYXNoOgorICAgIHRyYWNlRXhlY3V0aW9u
KCkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDEpCisgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MSwgdDApCisgICAgYnRxbnogdDAsIHRhZ01hc2ssIC5qc01hcEhhc2hOb3RDZWxs
CisgICAgYmJuZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBTdHJpbmdUeXBlLCAuc3RyYWlnaHRIYXNo
CisgICAgbG9hZHAgSlNTdHJpbmc6Om1fdmFsdWVbdDBdLCB0MAorICAgIGJ0cHogdDAsIC5zbG93
UGF0aAorICAgIGxvYWRpIFN0cmluZ0ltcGw6Om1faGFzaEFuZEZsYWdzW3QwXSwgdDAKKyAgICB1
cnNoaWZ0aSA2LCB0MCAjIEZJWE1FIHN0YXRpYyBhc3NlcnQgNiBmb3Igc19mbGFnQ291bnQgb2Yg
U3RyaW5nSW1wbCEKKyAgICBidGl6IHQwLCAuc2xvd1BhdGgKKyAgICBqbXAgLmJveFVwUmVzdWx0
CisgICAgIAorLnNsb3dQYXRoOgorICAgIGNhbGxPcGNvZGVTbG93UGF0aChfc2xvd19wYXRoX2pz
bWFwX2hhc2gpCisgICAgZGlzcGF0Y2goMykKKy5qc01hcEhhc2hOb3RDZWxsOgorICAgIGJxYiB0
MCwgdGFnVHlwZU51bWJlciwgLm9wMU5vdEludAorICAgIGptcCAuc3RyYWlnaHRIYXNoCisub3Ax
Tm90SW50OgorICAgIGJ0cXogdDAsIHRhZ1R5cGVOdW1iZXIsIC5zdHJhaWdodEhhc2gKKyAgICAj
IEZJWE1FIG1ha2UgZG91YmxlIGNhc2UgZmFzdAorICAgIGNhbGxPcGNvZGVTbG93UGF0aChfc2xv
d19wYXRoX2pzbWFwX2hhc2gpCisgICAgZGlzcGF0Y2goMykKKy5zdHJhaWdodEhhc2g6CisgICAg
bW92ZSB0MCwgdDEKKyMga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICBsc2hpZnRwIDMyLCB0MQor
ICAgIG5vdHEgdDEKKyAgICBhZGRxIHQxLCB0MAorIyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAg
bW92ZSB0MCwgdDEKKyAgICB1cnNoaWZ0cCAyMiwgdDEKKyAgICB4b3JxIHQxLCB0MAorIyBrZXkg
Kz0gfihrZXkgPDwgMTMpOworICAgIG1vdmUgdDAsIHQxCisgICAgbHNoaWZ0cCAxMywgdDEKKyAg
ICBub3RxIHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChrZXkgPj4gOCk7CisgICAgbW92
ZSB0MCwgdDEKKyAgICB1cnNoaWZ0cCA4LCB0MQorICAgIHhvcnEgdDEsIHQwCisjIGtleSArPSAo
a2V5IDw8IDMpOworICAgIG1vdmUgdDAsIHQxCisgICAgbHNoaWZ0cCAzLCB0MQorICAgIGFkZHEg
dDEsIHQwCisjIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hp
ZnRwIDE1LCB0MQorICAgIHhvcnEgdDEsIHQwCisjIGtleSArPSB+KGtleSA8PCAyNyk7CisgICAg
bW92ZSB0MCwgdDEKKyAgICBsc2hpZnRwIDI3LCB0MQorICAgIG5vdHEgdDEKKyAgICBhZGRxIHQx
LCB0MAorIyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZSB0MCwgdDEKKyAgICB1cnNoaWZ0
cCAzMSwgdDEKKyAgICB4b3JxIHQxLCB0MAorLmJveFVwUmVzdWx0OgorICAgIGFuZHEgNDI5NDk2
NzI5NSwgdDAgIyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIG9ycSB0YWdUeXBl
TnVtYmVyLCB0MAorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKKyAgICBzdG9yZXEg
dDAsIFtjZnIsIHQyLCA4XQorICAgIGRpc3BhdGNoKDMpCisKKworIyAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMiwgdDEpCisjICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKKyMgICAg
bG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDApCisjICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAu
b3BJc0pTQXJyYXlOb3RDZWxsCisjICAgIGNiZXEgSlNDZWxsOjptX3R5cGVbdDBdLCBBcnJheVR5
cGUsIHQxCisjICAgIG9ycSBWYWx1ZUZhbHNlLCB0MQorIyAgICBzdG9yZXEgdDEsIFtjZnIsIHQy
LCA4XQorIyAgICBkaXNwYXRjaCgzKQorIy5vcElzSlNBcnJheU5vdENlbGw6CisjICAgIHN0b3Jl
cSBWYWx1ZUZhbHNlLCBbY2ZyLCB0MiwgOF0KKyMgICAgZGlzcGF0Y2goMykKIAogCiBfbGxpbnRf
b3BfaXNfb2JqZWN0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDcsNiArMzQ3LDcgQEAgY29uc3QgT2JqZWN0VHlwZSA9IDIwCiBjb25zdCBGaW5hbE9i
amVjdFR5cGUgPSAyMQogY29uc3QgSlNGdW5jdGlvblR5cGUgPSAyMwogY29uc3QgQXJyYXlUeXBl
ID0gMjkKK2NvbnN0IEpTTWFwVHlwZSA9IDExNwogCiAjIFRoZSB0eXBlZCBhcnJheSB0eXBlcyBu
ZWVkIHRvIGJlIG51bWJlcmVkIGluIGEgcGFydGljdWxhciBvcmRlciBiZWNhdXNlIG9mIHRoZSBt
YW51YWxseSB3cml0dGVuCiAjIHN3aXRjaCBzdGF0ZW1lbnQgaW4gZ2V0X2J5X3ZhbCBhbmQgcHV0
X2J5X3ZhbC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0
aW9ucy5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS9p
bnN0cnVjdGlvbnMucmIJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEs
NyBAQCBNQUNST19JTlNUUlVDVElPTlMgPQogICAgICAibmVncCIsCiAgICAgICJuZWdxIiwKICAg
ICAgIm5vdGkiLAorICAgICAibm90cSIsCiAgICAgICJvcmkiLAogICAgICAicnNoaWZ0aSIsCiAg
ICAgICJ1cnNoaWZ0aSIsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFzbS94
ODYucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20veDg2
LnJiCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvb2ZmbGluZWFz
bS94ODYucmIJKHdvcmtpbmcgY29weSkKQEAgLTkwMSw2ICs5MDEsOCBAQCBjbGFzcyBJbnN0cnVj
dGlvbgogICAgICAgICAgICAgJGFzbS5wdXRzICJuZWcje3g4NlN1ZmZpeCg6cXVhZCl9ICN7eDg2
T3BlcmFuZHMoOnF1YWQpfSIKICAgICAgICAgd2hlbiAibm90aSIKICAgICAgICAgICAgICRhc20u
cHV0cyAibm90I3t4ODZTdWZmaXgoOmludCl9ICN7eDg2T3BlcmFuZHMoOmludCl9IgorICAgICAg
ICB3aGVuICJub3RxIgorICAgICAgICAgICAgJGFzbS5wdXRzICJub3Qje3g4NlN1ZmZpeCg6cXVh
ZCl9ICN7eDg2T3BlcmFuZHMoOnF1YWQpfSIKICAgICAgICAgd2hlbiAib3JpIgogICAgICAgICAg
ICAgaGFuZGxlWDg2T3AoIm9yI3t4ODZTdWZmaXgoOmludCl9IiwgOmludCkKICAgICAgICAgd2hl
biAib3JwIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0
NSw3IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0
RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRl
ICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1
ZGUgIkpTU3RyaW5nLmgiCiAjaW5jbHVkZSAiSlNXaXRoU2NvcGUuaCIKQEAgLTkwMCw0ICs5MDEs
MTEgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YWxfd2l0aAogICAgIEVORCgp
OwogfQogCitTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfanNtYXBfaGFzaCkKK3sKKyAgICBCRUdJ
TigpOworICAgIEpTVmFsdWUgdmFsdWVUb0hhc2ggPSBPUF9DKDIpLmpzVmFsdWUoKTsKKyAgICBS
RVRVUk4oSlNWYWx1ZShqc01hcEhhc2goZXhlYywgdmFsdWVUb0hhc2gpKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiAr
MjU2LDcgQEAgU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfaQogU0xPV19Q
QVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9nZXRfYnlfdmFsX3dpdGhfdGhpcyk7CiBTTE9XX1BB
VEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF9ieV9pZF93aXRoX3RoaXMpOwogU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfdmFsX3dpdGhfdGhpcyk7CitTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2pzbWFwX2hhc2gpOwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHJldmlz
aW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIGVudW0gSlNfRVhQT1JUX1BSSVZBVEUg
SW50cmluc2ljIHsKICAgICBJc1JlZ0V4cE9iamVjdEludHJpbnNpYywKICAgICBJc1R5cGVkQXJy
YXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEludHJpbnNp
YywKKyAgICBKU01hcEdldEludHJpbnNpYywKKyAgICBKU01hcEhhc0ludHJpbnNpYywKIAogICAg
IC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAgIFR5cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNSw3ICs3MjUsNiBAQCBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgICAgIEdsb2JhbFByb3Bl
cnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc1NldFByaXZhdGVOYW1l
KCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5j
SXNTZXQpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5TZXRJdGVyYXRv
clByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCks
IHByaXZhdGVGdW5jU2V0SXRlcmF0b3IpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25s
eSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5zZXRJdGVyYXRvck5leHRQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIHRoaXMsIDAsIFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4dCksIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzTWFwUHJpdmF0ZU5hbWUoKSwgSlNG
dW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc01hcCks
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzQXJyYXlQcml2YXRlTmFt
ZSgpLCBhcnJheUNvbnN0cnVjdG9yLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmlz
QXJyYXkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2Jh
bFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc0FycmF5Q29u
c3RydWN0b3JQcml2YXRlTmFtZSgpLCBwcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1Y3RvciwgRG9u
dEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUlu
Zm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY29uY2F0TWVtY3B5UHJpdmF0ZU5h
bWUoKSwgcHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHJl
dmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjYsNDAgKzI2LDkyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSlNNYXAuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1
ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFw
QnVja2V0OjpzX2luZm8gPSB7ICJIYXNoTWFwQnVja2V0IiwgLyogcGFyZW50IGNsYXNzIGluZm8g
Ki8gbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0KSB9OworCit2
b2lkIEhhc2hNYXBCdWNrZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEhh
c2hNYXBCdWNrZXQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHQpOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ByZXYpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5rZXkpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT52YWx1ZSk7
Cit9CisKK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwSW1wbDo6c19pbmZvID0geyAiSGFzaE1hcElt
cGwiLCAvKiBwYXJlbnQgY2xhc3MgaW5mbyAqLyBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEhhc2hNYXBJbXBsKSB9OworCit2b2lkIEhhc2hNYXBJbXBsOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEltcGwqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX2hlYWQpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3RhaWwpOworCisg
ICAgdmlzaXRvci5jb3B5TGF0ZXIodGhpc09iamVjdCwgTWFwQmFja2luZ1N0b3JlQ29weVRva2Vu
LCB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKSwgdGhpc09iamVjdC0+YnVmZmVyU2l6ZUluQnl0
ZXMoKSk7Cit9CisKK3ZvaWQgSGFzaE1hcEltcGw6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBj
ZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEJhc2U6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworCisgICAgSGFzaE1hcElt
cGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKKyAgICBpZiAodG9r
ZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHkodGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCkpKSB7CisgICAgICAgIEhhc2hNYXBCdWZmZXIq
IG9sZEJ1ZmZlciA9IHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgpOworICAgICAgICBzaXplX3Qg
YnVmZmVyU2l6ZUluQnl0ZXMgPSB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygpOworICAg
ICAgICBIYXNoTWFwQnVmZmVyKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVy
Kj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGJ1ZmZlclNpemVJbkJ5dGVzKSk7CisgICAgICAg
IG1lbWNweShuZXdCdWZmZXIsIG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAgICAg
ICB0aGlzT2JqZWN0LT5tX2J1ZmZlci5zZXRXaXRob3V0QmFycmllcihuZXdCdWZmZXIpOworICAg
ICAgICB2aXNpdG9yLmRpZENvcHkob2xkQnVmZmVyLCBidWZmZXJTaXplSW5CeXRlcyk7CisgICAg
fQorfQorCiBjb25zdCBDbGFzc0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpz
X2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRl
c3Ryb3koSlNDZWxsKiBjZWxsKQordm9pZCBKU01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCopCiB7Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAq
PihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU01hcDo6fkpTTWFwKCk7CisgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOworICAgIG1fbWFwLnNldCh2bSwgdGhpcywgSGFzaE1hcEltcGw6OmNy
ZWF0ZSh2bSkpOwogfQogCiBzaXplX3QgSlNNYXA6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxs
KQogewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAg
c2l6ZV90IG1hcERhdGFTaXplID0gdGhpc09iamVjdC0+bV9tYXBEYXRhLmNhcGFjaXR5SW5CeXRl
cygpOworICAgIC8vSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKKyAg
ICAvL3NpemVfdCBtYXBEYXRhU2l6ZSA9IHRoaXNPYmplY3QtPm1fbWFwRGF0YS5jYXBhY2l0eUlu
Qnl0ZXMoKTsKKyAgICBzaXplX3QgbWFwRGF0YVNpemUgPSAwOyAvLyBGSVhNRToKICAgICByZXR1
cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIG1hcERhdGFTaXplOwogfQogCiB2b2lkIEpT
TWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7
CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNN
YXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAg
Ly9qc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7CisKKyAgICBKU01hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwor
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7CiB9CiAKLXZvaWQgSlNNYXA6
OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29w
eVRva2VuIHRva2VuKQorLyoKK3NpemVfdCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci0gICAg
anNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS5jb3B5QmFja2luZ1N0b3JlKHZpc2l0b3Is
IHRva2VuKTsKKyAgICByZXR1cm4gbV9tYXBEYXRhLnNpemUoZXhlYyk7CiB9CiAKIGJvb2wgSlNN
YXA6OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQpAQCAtNjcsMjIgKzExOSwxNCBA
QCBib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlCiAgICAgcmV0dXJuIG1f
bWFwRGF0YS5jb250YWlucyhleGVjLCBrZXkpOwogfQogCi1zaXplX3QgSlNNYXA6OnNpemUoRXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX21hcERhdGEuc2l6ZShleGVjKTsKLX0KLQog
SlNWYWx1ZSBKU01hcDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiB7Ci0gICAg
SlNWYWx1ZSByZXN1bHQgPSBtX21hcERhdGEuZ2V0KGV4ZWMsIGtleSk7Ci0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgcmV0dXJuIG1fbWFwLmdldChleGVjLCBrZXkpOwogfQogCiB2b2lkIEpTTWFwOjpzZXQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBtX21hcERh
dGEuc2V0KGV4ZWMsIHRoaXMsIGtleSwgdmFsdWUpOworICAgIG1fbWFwLnNldChleGVjLCB0aGlz
LCBrZXksIHZhbHVlKTsKIH0KIAogdm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKQEAgLTk0
LDUgKzEzOCw2IEBAIGJvb2wgSlNNYXA6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIHsK
ICAgICByZXR1cm4gbV9tYXBEYXRhLnJlbW92ZShleGVjLCBrZXkpOwogfQorKi8KIAogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lvbiAyMDUwMzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiwxMSArMzIsMzQ2IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBIYXNoTWFwQnVj
a2V0IDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworcHVibGlj
OgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgSGFzaE1hcEJ1Y2tldCogY3JlYXRlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEhhc2hN
YXBCdWNrZXQqIGJ1Y2tldCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEhhc2hNYXBCdWNr
ZXQ+KHZtLmhlYXApKSBIYXNoTWFwQnVja2V0KHZtLCB2bS5oYXNoTWFwQnVja2V0U3RydWN0dXJl
LmdldCgpKTsKKyAgICAgICAgYnVja2V0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFidWNrZXQtPm5leHQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFi
dWNrZXQtPnByZXYoKSk7CisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorCisgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKKworICAgIEhhc2hNYXBCdWNrZXQoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeyB9CisKKyAg
ICB2b2lkIHNldE5leHQoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAg
ICAgICBtX25leHQuc2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0KKyAgICB2b2lkIHNldFBy
ZXYoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICBtX3ByZXYu
c2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIEhhc2hNYXBCdWNrZXQqIG5leHQo
KSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBIYXNoTWFwQnVja2V0KiBwcmV2
KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CisKKyAgICBXcml0ZUJhcnJpZXI8SGFz
aE1hcEJ1Y2tldD4gbV9uZXh0OworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX3By
ZXY7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IGtleTsKKyAgICBXcml0ZUJhcnJpZXI8VW5r
bm93bj4gdmFsdWU7CisgICAgYm9vbCBkZWxldGVkIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIEhh
c2hNYXBCdWZmZXIgeworcHVibGljOgorICAgIEhhc2hNYXBCdWZmZXIoKSA9IGRlbGV0ZTsKKwor
ICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgY2FwYWNpdHkpCisgICAg
eworICAgICAgICByZXR1cm4gY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldCopOworICAg
IH0KKworICAgIEhhc2hNYXBCdWNrZXQqKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0Kio+KHRoaXMpOworICAgIH0KKworICAg
IHN0YXRpYyBIYXNoTWFwQnVmZmVyKiBjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1aW50
MzJfdCBjYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhh
c2hNYXBCdWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAgICAgdm9pZCogZGF0
YSA9IG51bGxwdHI7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIodm0uaGVhcCk7Cisg
ICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIGFsbG9jYXRpb25T
aXplLCAmZGF0YSkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyAgRklYTUU6IHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlLgorICAgICAgICBIYXNoTWFwQnVmZmVy
KiBidWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyKj4oZGF0YSk7CisgICAgICAgIG1l
bXNldChidWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIHJldHVybiBidWZmZXI7
CisgICAgfQorCit9OworCisvLyBGSVhNRTogbWFrZSB0aGlzIEFMV0FZU19JTkxJTkUgaW5zaWRl
IFByb3BlcnR5RGVzY3JpcHRvcgorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBzYW1lVmFsdWVN
YXAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICBpZiAoYSA9
PSBiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWEuaXNOdW1iZXIoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGEsIGIpOworICAgIGlmICghYi5p
c051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG91YmxlIHggPSBhLmFzTnVt
YmVyKCk7CisgICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7CisgICAgYm9vbCB4SXNOYU4gPSBz
dGQ6OmlzbmFuKHgpOworICAgIGJvb2wgeUlzTmFOID0gc3RkOjppc25hbih5KTsKKyAgICBpZiAo
eElzTmFOIHx8IHlJc05hTikKKyAgICAgICAgcmV0dXJuIHhJc05hTiAmJiB5SXNOYU47CisgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgPT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90
Pih5KTsKK30KKworQUxXQVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKSB7CisgICAg
ICAgIGRvdWJsZSBkID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFzdGQ6OmlzbmFu
KGQpKSB7CisgICAgICAgICAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4oZCk7CisgICAgICAg
ICAgICBpZiAoaSA9PSBkKQorICAgICAgICAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoaSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgLy9z
dGF0aWMgZG91YmxlIHNsb3dDYXNlcyA9IDAuMDsKKyAgICAgICAgLy9zdGF0aWMgZG91YmxlIGhh
c0hhc2ggPSAwLjA7CisgICAgICAgIC8vZGF0YUxvZygianNNYXBIYXNoIHNsb3cgcGF0aCBzdHJp
bmchXG4iKTsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKKyAg
ICAgICAgY29uc3QgU3RyaW5nJiB3dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOworICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gVUlOVF9N
QVg7CisgICAgICAgIC8vc2xvd0Nhc2VzKys7CisgICAgICAgIC8vaWYgKHd0ZlN0cmluZy5pbXBs
KCktPmhhc0hhc2goKSkKKyAgICAgICAgLy8gICAgaGFzSGFzaCsrOworICAgICAgICAvL2RhdGFM
b2coIlBlcmNlbnQgaGFzaCIsIGhhc0hhc2gvc2xvd0Nhc2VzLCAiXG4iKTsKKyAgICAgICAgcmV0
dXJuIHd0ZlN0cmluZy5pbXBsKCktPmhhc2goKTsKKyAgICB9CisgICAgdWludDY0X3QgcmF3VmFs
dWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIHJldHVybiBXVEY6OmludEhhc2gocmF3
VmFsdWUpOworfQorCisKK2NsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTQ2VsbCB7CisgICAg
dHlwZWRlZiBKU0NlbGwgQmFzZTsKKworcHVibGljOgorICAgIERFQ0xBUkVfRVhQT1JUX0lORk87
CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAg
c3RhdGljIEhhc2hNYXBJbXBsKiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgSGFzaE1h
cEltcGwqIGltcGwgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNoTWFwSW1wbD4odm0u
aGVhcCkpIEhhc2hNYXBJbXBsKHZtLCB2bS5oYXNoTWFwSW1wbFN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgIGltcGwtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0
b3ImLCBDb3B5VG9rZW4pOworCisgICAgSGFzaE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zaXpl
KDApCisgICAgICAgICwgbV9kZWxldGVDb3VudCgwKQorICAgICAgICAsIG1fY2FwYWNpdHkoNCkK
KyAgICB7CisgICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldCoqIGJ1ZmZlcigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZlcigpOworICAgIH0KKworICAg
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIuc2V0
KHZtLCB0aGlzLCBIYXNoTWFwQnVmZmVyOjpjcmVhdGUodm0sIHRoaXMsIG1fY2FwYWNpdHkpKTsK
KyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyBpKyspCisgICAgICAgICAgICAgICAgQVNTRVJUKGlz
RW1wdHkoYnVmZmVyKClbaV0pKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEZJWE1FOiBzb21l
IGtpbmQgb2Ygd3JpdGUgYmFycmllciBvbiBvdXIgb3duZXI/CisgICAgICAgIG1faGVhZC5zZXQo
dm0sIHRoaXMsIEhhc2hNYXBCdWNrZXQ6OmNyZWF0ZSh2bSkpOworICAgICAgICBtX3RhaWwuc2V0
KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0OjpjcmVhdGUodm0pKTsKKworICAgICAgICBtX2hlYWQt
PnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwg
bV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9oZWFkLT5kZWxldGVkID0gdHJ1ZTsKKyAgICAgICAg
bV90YWlsLT5kZWxldGVkID0gdHJ1ZTsKKworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVj
a2V0KiBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFz
aE1hcEJ1Y2tldCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTEpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRW1wdHkoSGFzaE1hcEJ1Y2tldCogYnVja2V0KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBlbXB0eVZhbHVlKCk7CisgICAgfQorCisg
ICAgc3RhdGljIEhhc2hNYXBCdWNrZXQqIGRlbGV0ZWRWYWx1ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBCdWNrZXQqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KC0zKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0RlbGV0ZWQo
SGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBk
ZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tl
dCoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAg
ICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMy
X3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywga2V5KSAmIG1hc2s7CisgICAgICAgIEhhc2hNYXBC
dWNrZXQqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCog
YnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKworICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0
KSkgeworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBzYW1lVmFsdWVNYXAo
ZXhlYywga2V5LCBidWNrZXQtPmtleS5nZXQoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1
ZmZlciArIGluZGV4OworICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7Cisg
ICAgICAgICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIGlmIChIYXNoTWFwQnVj
a2V0KiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpKQorICAgICAgICAgICAgcmV0dXJu
ICgqYnVja2V0KS0+dmFsdWUuZ2V0KCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIWZpbmRCdWNrZXQoZXhlYywga2V5KTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlND
ZWxsKiBvd25lciwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBh
Y2l0eSAtIDE7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIGtleSkg
JiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0KiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7
CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAg
IHdoaWxlICghaXNFbXB0eShidWNrZXQpICYmICFpc0RlbGV0ZWQoYnVja2V0KSkgeworICAgICAg
ICAgICAgaWYgKHNhbWVWYWx1ZU1hcChleGVjLCBrZXksIGJ1Y2tldC0+a2V5LmdldCgpKSkgewor
ICAgICAgICAgICAgICAgIGJ1Y2tldC0+dmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ID0g
KGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsK
KyAgICAgICAgfQorCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIG5ld0VudHJ5ID0gbV90YWlsLmdl
dCgpOworICAgICAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgICAgIG5ld0VudHJ5
LT5rZXkuc2V0KHZtLCBvd25lciwga2V5KTsKKyAgICAgICAgbmV3RW50cnktPnZhbHVlLnNldCh2
bSwgb3duZXIsIHZhbHVlKTsKKyAgICAgICAgbmV3RW50cnktPmRlbGV0ZWQgPSBmYWxzZTsKKyAg
ICAgICAgSGFzaE1hcEJ1Y2tldCogbmV3VGFpbCA9IEhhc2hNYXBCdWNrZXQ6OmNyZWF0ZSh2bSk7
CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOworICAgICAgICBuZXdUYWls
LT5zZXRQcmV2KHZtLCBuZXdFbnRyeSk7CisgICAgICAgIG5ld1RhaWwtPmRlbGV0ZWQgPSB0cnVl
OworICAgICAgICBuZXdFbnRyeS0+c2V0TmV4dCh2bSwgbmV3VGFpbCk7CisgICAgICAgIHVpbnQz
Ml90IG5ld1NpemUgPSArK21fc2l6ZTsKKyAgICAgICAgaWYgKDIqbmV3U2l6ZSA+IG1fY2FwYWNp
dHkpCisgICAgICAgICAgICByZWhhc2goZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBib29sIHJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldCoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAg
ICAgaWYgKCFidWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgLy8gRklYTUU6IHN0b3AgbGVha2luZyBtZW1vcnkg
aGVyZSwgYW5kIGZpZ3VyZSBvdXQgaXRlcmF0b3JzLgorICAgICAgICBIYXNoTWFwQnVja2V0KiBp
bXBsID0gKmJ1Y2tldDsKKyAgICAgICAgaW1wbC0+bmV4dCgpLT5zZXRQcmV2KHZtLCBpbXBsLT5w
cmV2KCkpOworICAgICAgICBpbXBsLT5wcmV2KCktPnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7
CisgICAgICAgIGltcGwtPmRlbGV0ZWQgPSB0cnVlOworCisgICAgICAgICpidWNrZXQgPSBkZWxl
dGVkVmFsdWUoKTsKKworICAgICAgICBtX2RlbGV0ZUNvdW50Kys7CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHsK
KyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgICAgICBtX2NhcGFjaXR5ID0gbV9j
YXBhY2l0eSAqIDI7CisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhpcywgSGFzaE1hcEJ1ZmZl
cjo6Y3JlYXRlKHZtLCB0aGlzLCBtX2NhcGFjaXR5KSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJ
U0FCTEVEKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0
eTsgaSsrKQorICAgICAgICAgICAgICAgIEFTU0VSVChpc0VtcHR5KHRoaXMtPmJ1ZmZlcigpW2ld
KSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNoTWFwQnVja2V0KiBpdGVyID0gbV9oZWFkLT5u
ZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGVuZCA9IG1fdGFpbC5nZXQoKTsKKyAgICAg
ICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICBSRUxFQVNF
X0FTU0VSVCghKG1fY2FwYWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CisgICAgICAgIEhhc2hN
YXBCdWNrZXQqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIg
IT0gZW5kKSB7CisgICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBp
dGVyLT5rZXkuZ2V0KCkpICYgbWFzazsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBI
YXNoTWFwQnVja2V0KiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIHdo
aWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gKGlu
ZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJbaW5k
ZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZl
cltpbmRleF0gPSBpdGVyOworICAgICAgICAgICAgaXRlciA9IGl0ZXItPm5leHQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3Qgc2l6ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemUgPj0gbV9kZWxldGVDb3VudCk7Cisg
ICAgICAgIHJldHVybiBtX3NpemUgLSBtX2RlbGV0ZUNvdW50OworICAgIH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgICAgICBtX3NpemUgPSAwOworICAgICAgICBtX2RlbGV0ZUNv
dW50ID0gMDsKKyAgICAgICAgbV9oZWFkLT5zZXROZXh0KHZtLCBtX3RhaWwuZ2V0KCkpOworICAg
ICAgICBtX3RhaWwtPnNldFByZXYodm0sIG1faGVhZC5nZXQoKSk7CisgICAgICAgIG1fY2FwYWNp
dHkgPSA0OworICAgICAgICBtX2J1ZmZlci5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWZmZXI6OmNy
ZWF0ZSh2bSwgdGhpcywgbV9jYXBhY2l0eSkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
c2l6ZV90IGJ1ZmZlclNpemVJbkJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2NhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXQqKTsKKyAgICB9CisKKy8vIEZJWE1FOiBt
YWtlIHByaXZhdGUuCitwdWJsaWM6CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1f
aGVhZDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV90YWlsOworICAgIENvcHlC
YXJyaWVyPEhhc2hNYXBCdWZmZXI+IG1fYnVmZmVyOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAg
ICB1aW50MzJfdCBtX2RlbGV0ZUNvdW50OworICAgIHVpbnQzMl90IG1fY2FwYWNpdHk7Cit9Owor
CiBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi1jbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0
aWJsZU9iamVjdCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1
YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CisgICAgdHlwZWRl
ZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKICAgICBmcmllbmQgY2xhc3MgSlNNYXBJdGVyYXRv
cjsKIApAQCAtOTIsNDEgKzQyNyw2MyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNNYXBUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0sIHN0
cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlLT5nbG9iYWxPYmplY3QoKSk7
CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKwogICAgIHN0YXRp
YyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAg
ICAgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAg
fQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6ZV90IHNpemUo
RXhlY1N0YXRlKik7Ci0gICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXQoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFs
dWUgdmFsdWUpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKik7Ci0gICAgYm9vbCByZW1vdmUo
RXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZShFeGVj
U3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5zaXplKCk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5nZXQoZXhlYywga2V5KTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmhhcyhleGVjLCBrZXkpOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwg
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fbWFwLT5zZXQoZXhlYywgdGhpcywga2V5
LCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiBleGVjKQorICAgIHsK
KyAgICAgICAgbV9tYXAtPmNsZWFyKGV4ZWMpOworICAgIH0KKyAgICBib29sIHJlbW92ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5y
ZW1vdmUoZXhlYywga2V5KTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAg
ICAgICwgbV9tYXBEYXRhKHZtLCB0aGlzKQogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRv
ciYsIENvcHlUb2tlbik7CiAKLSAgICBNYXBEYXRhIG1fbWFwRGF0YTsKKyAgICAvLyBGSVhNRTog
ZG9uJ3QgbWFrZSB0aGlzIHB1YmxpYy4KK3B1YmxpYzoKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1h
cEltcGw+IG1fbWFwOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVy
YXRvci5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAiQ29tbW9uSWRl
bnRpZmllcnMuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTTWFwLmgiCkBAIC00MSw2ICs0NCw3IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9tYXAu
c2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7CisgICAgc2V0SXRlcmF0b3Iodm0sIG1fbWFw
LT5tX21hcC0+bV9oZWFkLmdldCgpKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00OSw2ICs1Myw3
IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9tYXApOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIpOwog
fQogCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjcsOSBAQCBKU1ZhbHVl
IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTTWFwSXRlcmF0b3IqIEpTTWFw
SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNsb25lID0gSlNN
YXBJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9tYXAuZ2V0KCksIG1fa2luZCk7Ci0gICAg
Y2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBjbG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwg
bV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQoKSk7CiAgICAg
cmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDUyICs1
MSw2NSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBi
b29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZ
U19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogYWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAg
IHsKLSAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAg
ICAgICAgaWYgKCFtX2l0ZXJhdG9yLm5leHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQq
IHByZXYgPSBtX2l0ZXIuZ2V0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG1f
aXRlci0+bmV4dCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCkg
eworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tl
dC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAg
ICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBwcmV2KTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7
IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZhbHVlLgorICAgICAgICByZXR1cm4gYnVj
a2V0OworICAgIH0KKyAgICBib29sIG5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4
ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgICAgICBpZiAobV9raW5kID09IEl0ZXJhdGVWYWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0g
cGFpci52YWx1ZTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT52YWx1ZS5nZXQoKTsKICAg
ICAgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2YWx1ZSA9
IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPmtleS5nZXQoKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxGcmFtZSwgcGFpci5r
ZXksIHBhaXIudmFsdWUpOworICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGV4ZWMsIGJ1
Y2tldC0+a2V5LmdldCgpLCBidWNrZXQtPnZhbHVlLmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFsdWUoSlNWYWx1ZSYga2V5LCBKU1ZhbHVl
JiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUm
IGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6OktleVZhbHVlUGFpcjxK
U1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0b3IubmV4dChwYWly
KSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7Cisg
ICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAg
IGtleSA9IHBhaXIua2V5OwotICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgIGtl
eSA9IGJ1Y2tldC0+a2V5LmdldCgpOworICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+dmFsdWUuZ2V0
KCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHZvaWQgZmluaXNoKCkKICAg
ICB7Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7CisgICAgICAgIC8vbV9pdGVyYXRvci5m
aW5pc2goKTsKICAgICB9CiAKICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X21hcC5nZXQoKTsgfQogICAgIEpTTWFwSXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0g
ICAgSlNNYXA6Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNNYXBJ
dGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCogaXRlcmF0ZWRPYmpl
Y3QsIEl0ZXJhdGlvbktpbmQga2luZCkKKyAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5t
X21hcERhdGEuY3JlYXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5k
KQorICAgIHsgfQorCisgICAgdm9pZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXQq
IGJ1Y2tldCkKICAgICB7CisgICAgICAgIG1faXRlci5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CiAg
ICAgfQogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpT
TWFwKik7CkBAIC0xMDQsNyArMTE3LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNN
YXA+IG1fbWFwOwotICAgIEpTTWFwOjpNYXBEYXRhOjpJdGVyYXRvckRhdGEgbV9pdGVyYXRvcjsK
KyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9pdGVyOwogICAgIEl0ZXJhdGlvbktp
bmQgbV9raW5kOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShK
U01hcEl0ZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5j
cHAJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzEgKzM3LDI4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjb25zdCBDbGFzc0luZm8gSlNTZXQ6OnNfaW5mbyA9IHsgIlNldCIsICZCYXNlOjpzX2lu
Zm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTZXQpIH07CiAKLXZvaWQgSlNTZXQ6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQordm9pZCBKU1NldDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewot
ICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgdGhpc09i
amVjdC0+SlNTZXQ6On5KU1NldCgpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICBtX21hcC5zZXQodm0sIHRoaXMsIEhhc2hNYXBJbXBsOjpjcmVhdGUodm0pKTsKIH0KIAogc2l6
ZV90IEpTU2V0Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU1NldCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHNpemVfdCBzZXREYXRhU2l6ZSA9
IHRoaXNPYmplY3QtPm1fc2V0RGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKKyAgICAvL0pTU2V0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7CisgICAgLy9zaXplX3Qgc2V0RGF0YVNp
emUgPSB0aGlzT2JqZWN0LT5tX3NldERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7CisgICAgc2l6ZV90
IHNldERhdGFTaXplID0gMDsKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSAr
IHNldERhdGFTaXplOwogfQogCiB2b2lkIEpTU2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxs
LCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNTZXQ6OmNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewot
ICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwotICAgIGpz
Q2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0
b2tlbik7CisgICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXApOwogfQogCisvKgogYm9vbCBKU1Nl
dDo6aGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICByZXR1cm4gbV9z
ZXREYXRhLmNvbnRhaW5zKGV4ZWMsIHZhbHVlKTsKQEAgLTg2LDUgKzgzLDYgQEAgYm9vbCBKU1Nl
dDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogewogICAgIHJldHVybiBtX3NldERhdGEu
cmVtb3ZlKGV4ZWMsIHZhbHVlKTsKIH0KKyovCiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXQuaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogI2Rl
ZmluZSBKU1NldF9oCiAKICNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2luY2x1
ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJNYXBEYXRhLmgi
CiAKQEAgLTM0LDkgKzM1LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0
b3I7CiAKLWNsYXNzIEpTU2V0IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNz
IEpTU2V0IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogcHVibGljOgotICAgIHR5cGVkZWYg
SlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3Qg
QmFzZTsKIAogICAgIGZyaWVuZCBjbGFzcyBKU1NldEl0ZXJhdG9yOwogCkBAIC05NywzMSArOTgs
NTEgQEAgcHVibGljOgogICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gY3Jl
YXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgYm9vbCBoYXMoRXhlY1N0
YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6ZV90IHNpemUoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBhZGQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBjbGVh
cihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAg
ICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5z
aXplKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5oYXMoZXhlYywg
a2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICAvLyBGSVhNRTogYWJzdHJhY3QgSGFzaE1h
cEJ1Y2tldC9IYXNoTWFwSW1wbCB0byBub3Qgd2FzdGUgc3Bhc2UgZm9yIGp1bmsgdmFsdWUuCisg
ICAgICAgIG1fbWFwLT5zZXQoZXhlYywgdGhpcywga2V5LCBqc051bGwoKSk7CisgICAgfQogCi1w
cml2YXRlOgorICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAg
bV9tYXAtPmNsZWFyKGV4ZWMpOworICAgIH0KKworICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnJlbW92ZShl
eGVjLCBrZXkpOworICAgIH0KKworcHVibGljOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1f
c2V0RGF0YSh2bSwgdGhpcykKKyAgICAgICAgLy8sIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCi0gICAgU2V0RGF0YSBt
X3NldERhdGE7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBJbXBsPiBtX21hcDsKKyAgICAvL1Nl
dERhdGEgbV9zZXREYXRhOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNTAzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MSw2ICs0MSw3IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0m
IHYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0
aGlzLCBpdGVyYXRlZE9iamVjdCk7CisgICAgc2V0SXRlcmF0b3Iodm0sIG1fc2V0LT5tX21hcC0+
bV9oZWFkLmdldCgpKTsKIH0KIAogdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00OSw2ICs1MCw3IEBAIHZvaWQg
SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9z
ZXQpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIpOwogfQogCiBKU1Zh
bHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjQsOSBAQCBKU1ZhbHVlIEpTU2V0SXRl
cmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTU2V0SXRlcmF0b3IqIEpTU2V0SXRlcmF0b3I6
OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNsb25lID0gSlNTZXRJdGVyYXRv
cjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0
SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1fa2luZCk7Ci0gICAgY2xvbmUtPm1f
aXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0
byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2FsbGVlKCktPmdsb2Jh
bE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBtX3NldC5nZXQoKSwgbV9raW5kKTsK
KyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQoKSk7CiAgICAgcmV0dXJuIGNs
b25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJh
dG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5oCShyZXZpc2lvbiAyMDUwMzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDQ2ICs1Miw2MyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5leHQo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldCogYWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAgICAg
ICAgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYg
KCFtX2l0ZXJhdG9yLm5leHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIHByZXYgPSBt
X2l0ZXIuZ2V0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4
dCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCkgeworICAgICAg
ICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgp
OworICAgICAgICB9CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVy
YXRvcihleGVjLT52bSgpLCBwcmV2KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtl
ZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZhbHVlLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAg
IH0KKworICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7Cisg
ICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAg
IGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZhbHVlIHx8IG1fa2luZCA9PSBJdGVyYXRlS2V5KQotICAg
ICAgICAgICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT5r
ZXkuZ2V0KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihj
YWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLmtleSk7CisgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0
ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkuZ2V0KCksIGJ1Y2tldC0+a2V5LmdldCgpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2goKQogICAgIHsKLSAgICAg
ICAgbV9pdGVyYXRvci5maW5pc2goKTsKKyAgICAgICAgLy8gRklYTUU6IGZpZ3VyZSB0aGlzIG91
dC4KKyAgICAgICAgLy9tX2l0ZXJhdG9yLmZpbmlzaCgpOwogICAgIH0KIAogICAgIEl0ZXJhdGlv
bktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEpTVmFsdWUgaXRlcmF0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmdldCgpOyB9CiAgICAgSlNTZXRJdGVyYXRv
ciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU1NldDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRh
KiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2l0ZXJhdG9yOwotICAg
IH0KLQogcHJpdmF0ZToKLSAgICBKU1NldEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTU2V0KiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAgIEpT
U2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTZXQqLCBJdGVyYXRp
b25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1f
aXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fc2V0RGF0YS5jcmVhdGVJdGVyYXRvckRhdGEodGhp
cykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgewogICAgIH0KIAorICAgIHZvaWQgc2V0
SXRlcmF0b3IoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICBt
X2l0ZXIuc2V0KHZtLCB0aGlzLCBidWNrZXQpOyAKKyAgICB9CisKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAgICBKU1NldDo6U2V0RGF0YTo6SXRlcmF0
b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1faXRl
cjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJ
QUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDkgQEAg
ZW51bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBNb2R1bGVFbnZpcm9ubWVudFR5cGUsCiAgICAg
UmVnRXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5cGUsCisgICAgSlNNYXBUeXBlLAog
Ci0gICAgTGFzdEpTQ09iamVjdFR5cGUgPSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09i
amVjdFR5cGUgPSBKU01hcFR5cGUsCiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBl
KSA9PSBzaXplb2YodWludDhfdCksIHNpemVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxNCAr
MzIsMjQgQEAKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgogCisjaW5jbHVkZSAiTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmgiCisKKy8q
IFNvdXJjZSBmb3IgTWFwSXRlcmF0b3JQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBtYXBJdGVyYXRv
clByb3RvdHlwZVRhYmxlCitAZW5kCisqLworICAvL25leHQgICAgICBKU0J1aWx0aW4gIERvbnRF
bnVtfEZ1bmN0aW9uIDAKKwogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBNYXBJ
dGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiTWFwIEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShNYXBJdGVyYXRvclByb3RvdHlwZSkgfTsKK2NvbnN0
IENsYXNzSW5mbyBNYXBJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiTWFwIEl0ZXJhdG9y
IiwgJkJhc2U6OnNfaW5mbywgJm1hcEl0ZXJhdG9yUHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRI
T0RfVEFCTEUoTWFwSXRlcmF0b3JQcm90b3R5cGUpIH07CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoRXhlY1N0YXRlKik7
CiAKIHZvaWQgTWFwSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKKyAgICBVTlVTRURfUEFSQU0oZ2xvYmFsT2Jq
ZWN0KTsKKwogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7CiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQ
cm90b3R5cGUuaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
OCBAQCBjbGFzcyBNYXBJdGVyYXRvclByb3RvdHlwZSA6IHB1YmxpYyBKU05vCiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBIYXNTdGF0aWNQcm9wZXJ0eVRhYmxlIHwgQmFzZTo6U3Ry
dWN0dXJlRmxhZ3M7CisKICAgICBzdGF0aWMgTWFwSXRlcmF0b3JQcm90b3R5cGUqIGNyZWF0ZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKICAgICAgICAgTWFwSXRlcmF0b3JQcm90b3R5cGUqIHByb3RvdHlwZSA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPE1hcEl0ZXJhdG9yUHJvdG90eXBlPih2bS5oZWFwKSkgTWFw
SXRlcmF0b3JQcm90b3R5cGUodm0sIHN0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTAzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgY29uc3QgQ2xhc3NJbmZvIE1hcFByb3RvdHlwZTo6c19p
bmZvID0gewogLyogU291cmNlIGZvciBNYXBQcm90b3R5cGUubHV0LmgKIEBiZWdpbiBtYXBQcm90
b3R5cGVUYWJsZQogICBmb3JFYWNoICAgSlNCdWlsdGluICBEb250RW51bXxGdW5jdGlvbiAwCisg
IGhhcyAgICAgICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDEKKyAgbGlzdEFzQXJyYXkg
ICAgICAgSlNCdWlsdGluICBEb250RW51bXxGdW5jdGlvbiAwCiBAZW5kCiAqLwogCkBAIC03MCwx
NSArNzIsMTYgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiAg
ICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1l
cy0+Y2xlYXIsIG1hcFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5
d29yZCwgbWFwUHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90
b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVu
dW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEs
IEpTTWFwR2V0SW50cmluc2ljKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMs
IERvbnRFbnVtLCAxLCBKU01hcEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNT
ZXQsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpLCBt
YXBQcm90b0Z1bmNLZXlzLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVz
UHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNWYWx1ZXMsIERvbnRFbnVtLCAwKTsKIAotICAgIC8v
IFByaXZhdGUgZ2V0IC8gc2V0IG9wZXJhdGlvbnMuCi0gICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHJp
dmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7Cisg
ICAgLy9KU0Z1bmN0aW9uKiBnZXRGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5G
dW5jdGlvbih2bSwgbWFwUHJvdG90eXBlR2V0Q29kZUdlbmVyYXRvcih2bSksIGdsb2JhbE9iamVj
dCwgImdldCIpOworICAgIC8vSlNGdW5jdGlvbiogc2V0RnVuY3Rpb24gPSBKU0Z1bmN0aW9uOjpj
cmVhdGVCdWlsdGluRnVuY3Rpb24odm0sIG1hcFByb3RvdHlwZVNldENvZGVHZW5lcmF0b3Iodm0p
LCBnbG9iYWxPYmplY3QsICJzZXQiKTsKKyAgICAvL3B1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2YXRlTmFtZSgpLCBn
ZXRGdW5jdGlvbiwgRG9udEVudW0pOworICAgIC8vcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnNldFByaXZhdGVOYW1lKCksIHNl
dEZ1bmN0aW9uLCBEb250RW51bSk7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0gSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVuY0VudHJp
ZXMpOwogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLCBlbnRyaWVzLCBEb250RW51bSk7
CkBAIC05MCwxNiArOTMsMTMgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bQogCiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU01hcCogZ2V0TWFwKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVj
dCgpKSB7CisgICAgaWYgKCF0aGlzVmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgdGhyb3dWTUVy
cm9yKGNhbGxGcmFtZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1
ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgSlNNYXAqIG1hcCA9IGpz
RHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAgIGlmICghbWFwKSB7Ci0gICAgICAg
IHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNh
bGxlZCBvbiBub24tTWFwIG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
fQotICAgIHJldHVybiBtYXA7CisgICAgaWYgKHRoaXNWYWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09
IEpTTWFwVHlwZSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFw
UHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xNTAsNyArMTUwLDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW4KICAgICBKU01hcCogbWFw
ID0gZ2V0TWFwKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFt
YXApCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihtYXAtPnNpemUoY2FsbEZyYW1lKSkpOwor
ICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKKyAgICBKU1ZhbHVlIG1hcFNpemUgPSBtYXAt
PmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwU2l6ZVBy
aXZhdGVOYW1lKCkpOworICAgIEpTVmFsdWUgZGVsZXRlQ291bnQgPSBtYXAtPmdldERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkubWFwRGVsZXRlQ291bnRQcml2YXRl
TmFtZSgpKTsKKyAgICBBU1NFUlQobWFwU2l6ZS5hc1VJbnQzMigpID49IGRlbGV0ZUNvdW50LmFz
VUludDMyKCkpOworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbWFwU2l6ZS5hc1VJbnQzMigp
IC0gZGVsZXRlQ291bnQuYXNVSW50MzIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKG51bUVsZW1lbnRzKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW5jVmFsdWVzKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTc3LDExICsxODIs
NiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBj
YWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgdGhpc09iaiwgSXRlcmF0ZUtleSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSkpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2
YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5h
bWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CkBAIC0xOTQsNyAr
MTk0LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuYwogICAgIEFT
U0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSkpOwog
ICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihleGVj
LT50aGlzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAgIGlmIChpdGVyYXRv
ci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgaWYgKGl0ZXJhdG9yLT5uZXh0S2V5
VmFsdWUoZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgSlNBcnJheSogcmVzdWx0QXJyYXkg
PSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAgICAg
cmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIGtleSk7CiAgICAgICAgIHJlc3Vs
dEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAxLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAkocmV2aXNpb24gMjA1MDMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDcgKzU4LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqKTsKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQoRXhlY1N0YXRlKik7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIwNTAzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIK
ICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgor
I2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNs
dWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVn
aXN0cnlLZXkuaCIKQEAgLTI0OSw2ICsyNTAsOCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHdlYkFzc2VtYmx5
Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNlbmRpZgorICAgIGhhc2hNYXBCdWNr
ZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVja2V0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEltcGxTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBI
YXNoTWFwSW1wbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogCiAgICAg
aXRlcmF0aW9uVGVybWluYXRvci5zZXQoKnRoaXMsIEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdGhp
cywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSwgMSkp
KTsKICAgICBuYXRpdmVTdGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBOYXRpdmVT
dGRGdW5jdGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA1MDMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYg
KzMyOSw4IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJsb2NrU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOwor
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25n
PFN0cnVjdHVyZT4gaGFzaE1hcEltcGxTdHJ1Y3R1cmU7CiAKICAgICBTdHJvbmc8SlNDZWxsPiBp
dGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlOYW1l
RW51bWVyYXRvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287367</attachid>
            <date>2016-08-29 20:40:58 -0700</date>
            <delta_ts>2016-08-30 17:34:53 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>143061</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvc3RyZXNzL21vZGlmeS1tYXAtZHVyaW5nLWl0ZXJhdGlvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tb2RpZnktbWFwLWR1cmluZy1pdGVyYXRpb24uanMJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIEpTVGVzdHMvc3RyZXNzL21vZGlmeS1tYXAtZHVyaW5nLWl0
ZXJhdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAsMTYgKzEwLDE5IEBAIGZ1bmN0aW9uIGlk
ZW50aXR5UGFpcnMoYXJyYXkpIHsKIAogdmFyIG1hcCA9IG5ldyBNYXAoaWRlbnRpdHlQYWlycyhb
MF0pKTsKIHZhciBjb3VudGVyID0gMDsKK3ByaW50KCJBIik7CiBmb3IgKHZhciBbZWxtLCBfXSBv
ZiBtYXApIHsKICAgICB0ZXN0VmFsdWUoZWxtLCBjb3VudGVyKTsKICAgICBtYXAuc2V0KGVsbSAr
IDEsIGVsbSArIDEpOwogICAgIGlmIChlbG0gPiAxMDAwMCkgeworICAgICAgICBwcmludCgiQ2xl
YXJpbmcgbWFwIik7CiAgICAgICAgIG1hcC5jbGVhcigpOwogICAgIH0KICAgICArK2NvdW50ZXI7
CiB9CiB0ZXN0VmFsdWUoY291bnRlciwgMTAwMDIpOwogCitwcmludCgiQiIpOwogdmFyIG1hcCA9
IG5ldyBNYXAoaWRlbnRpdHlQYWlycyhbMCwgMSwgMiwgM10pKTsKIHZhciBjb3VudGVyID0gMDsK
IGZvciAodmFyIFtlbG0sIF9dIG9mIG1hcCkgewpJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9FUzZT
YW1wbGVCZW5jaC9jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1w
bGVCZW5jaC9jbGkuanMJKHJldmlzaW9uIDIwNTEzNCkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2
U2FtcGxlQmVuY2gvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0ICszMCw0IEBAIGxvYWQo
ImFpcl9iZW5jaG1hcmsuanMiKTsKIGxvYWQoImJhc2ljX2JlbmNobWFyay5qcyIpOwogbG9hZCgi
Z2x1ZS5qcyIpOwogCi1kcml2ZXIuc3RhcnQoMTApOworZHJpdmVyLnN0YXJ0KDQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw2ICs5Niw3IEBAIEphdmFTY3JpcHRDb3JlX0JVSUxUSU5TX1NPVVJDRVMg
PSBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0LmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9JbnRlcm5hbFBy
b21pc2VDb25zdHJ1Y3Rvci5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvSXRl
cmF0b3JQcm90b3R5cGUuanMgXAorICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL01hcEl0
ZXJhdG9yUHJvdG90eXBlLmpzIFwKICAgICAkKEphdmFTY3JpcHRDb3JlKS9idWlsdGlucy9NYXBQ
cm90b3R5cGUuanMgXAogICAgICQoSmF2YVNjcmlwdENvcmUpL2J1aWx0aW5zL01vZHVsZUxvYWRl
clByb3RvdHlwZS5qcyBcCiAgICAgJChKYXZhU2NyaXB0Q29yZSkvYnVpbHRpbnMvTnVtYmVyQ29u
c3RydWN0b3IuanMgXApAQCAtMTQ2LDYgKzE0Nyw3IEBAIE9CSkVDVF9MVVRfSEVBREVSUyA9IFwK
ICAgICBKU09OT2JqZWN0Lmx1dC5oIFwKICAgICBKU1Byb21pc2VQcm90b3R5cGUubHV0LmggXAog
ICAgIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIFwKKyAgICBNYXBJdGVyYXRvclByb3RvdHlw
ZS5sdXQuaCBcCiAgICAgTWFwUHJvdG90eXBlLmx1dC5oIFwKICAgICBNb2R1bGVMb2FkZXJQcm90
b3R5cGUubHV0LmggXAogICAgIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzUyMyw2ICszNTIzLDcgQEAKIAkJNzJBQUY3Q0IxRDBEMzE4QjAwNUU2MEJF
IC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyQUFGN0NDMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1
c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ3VzdG9tR2V0dGVyU2V0dGVyRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzdCMjVDQjJDMzA5NEE5MkEzOEUxREIzIC8qIEpTTW9kdWxlTG9hZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTW9kdWxlTG9hZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5MDEwNzM3MUQ2Njk3NEMwMDU4MDQyMiAvKiBNYXBJdGVy
YXRvclByb3RvdHlwZS5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90
eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTA1QkI2NjFEMTIwNTBFMDAx
OUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IElubGluZUFjY2Vzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAvKiBJbmxpbmVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lQWNjZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTc5MTYwREJCMUM4RTNFQzgwMDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm94eVJldm9rZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MDE5LDYgKzcwMjAsNyBAQAogCQkJCUUzM0Y1MDg4MUI4
NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3
Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYgLyogSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJ
NzAzNTU4N0MxQzQxODQxOTAwNEJEN0JGIC8qIE1hcFByb3RvdHlwZS5qcyAqLywKKwkJCQk3OTAx
MDczNzFENjY5NzRDMDA1ODA0MjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJ
RTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0YwIC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5qcyAqLywK
IAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAzNTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMgKi8s
CiAJCQkJQTE1REU1QzUxQzBGQkY4RDAwODkxMzNEIC8qIE51bWJlclByb3RvdHlwZS5qcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWlsdGluTmFtZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQnVpbHRpbk5hbWVzLmgJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9CdWls
dGluTmFtZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsOCArOTMsNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBtYWNybyhjYXBhYmlsaXRpZXMpIFwKICAgICBtYWNybyhzdGFyRGVmYXVsdCkgXAog
ICAgIG1hY3JvKEluc3BlY3Rvckluc3RydW1lbnRhdGlvbikgXAotICAgIG1hY3JvKGdldCkgXAot
ICAgIG1hY3JvKHNldCkgXAogICAgIG1hY3JvKHNoaWZ0KSBcCiAgICAgbWFjcm8oYWxsb2NhdGVU
eXBlZEFycmF5KSBcCiAgICAgbWFjcm8oSW50OEFycmF5KSBcCkBAIC0xMzYsNyArMTM0LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgbWFjcm8ocHJlZGljdEZpbmFsTGVuZ3RoRnJvbUFyZ3VtdW50
cykgXAogICAgIG1hY3JvKHByaW50KSBcCiAgICAgbWFjcm8oaXNTZXQpIFwKLSAgICBtYWNybyhp
c01hcCkgXAogICAgIG1hY3JvKHJlZ0V4cENyZWF0ZSkgXAogICAgIG1hY3JvKFNldEl0ZXJhdG9y
KSBcCiAgICAgbWFjcm8oc2V0SXRlcmF0b3JOZXh0KSBcCkBAIC0xNjAsNyArMTU3LDE1IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgIG1hY3JvKHJlZ0V4cFRlc3RGYXN0KSBcCiAgICAgbWFjcm8oc3Ry
aW5nSW5jbHVkZXNJbnRlcm5hbCkgXAogICAgIG1hY3JvKHN0cmluZ1NwbGl0RmFzdCkgXAotICAg
IG1hY3JvKHN0cmluZ1N1YnN0ckludGVybmFsKQorICAgIG1hY3JvKHN0cmluZ1N1YnN0ckludGVy
bmFsKSBcCisgICAgbWFjcm8obWFwSGVhZCkgXAorICAgIG1hY3JvKG1hcFRhaWwpIFwKKyAgICBt
YWNybyhtYXBUYWJsZSkgXAorICAgIG1hY3JvKG1hcEhhc2gpIFwKKyAgICBtYWNybyhtYXBTaXpl
KSBcCisgICAgbWFjcm8obWFwRGVsZXRlQ291bnQpIFwKKyAgICBtYWNybyhtYXBCdWNrZXQpIFwK
KyAgICBtYWNybyhtYXBJdGVyYXRpb25LaW5kKSBcCiAKIAogI2RlZmluZSBJTklUSUFMSVpFX1BS
SVZBVEVfVE9fUFVCTElDX0VOVFJZKG5hbWUpIG1fcHJpdmF0ZVRvUHVibGljTWFwLmFkZChtXyMj
bmFtZSMjUHJpdmF0ZU5hbWUuaW1wbCgpLCAmbV8jI25hbWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J1aWx0aW5zL01hcEl0ZXJhdG9yUHJvdG90eXBlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9NYXBJdGVyYXRvclByb3RvdHlwZS5qcwko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwSXRlcmF0
b3JQcm90b3R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Z1bmN0aW9uIG5leHQoKQorewor
ICAgIGxldCBsYXN0TWFwQnVja2V0ID0gdGhpcy5AbWFwQnVja2V0OworICAgIGlmICghbGFzdE1h
cEJ1Y2tldCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIE1hcEl0
ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1NYXBJdGVyYXRvciBvYmplY3QiKTsKKworICAgIGxldCBs
aXN0TmV4dCA9IGxhc3RNYXBCdWNrZXQubGlzdE5leHQ7CisgICAgd2hpbGUgKGxpc3ROZXh0ICYm
IGxpc3ROZXh0LmRlbGV0ZWQpCisgICAgICAgIGxpc3ROZXh0ID0gbGlzdE5leHQubGlzdE5leHQ7
CisKKyAgICBpZiAobGlzdE5leHQpIHsKKyAgICAgICAgdGhpcy5AbWFwQnVja2V0ID0gbGlzdE5l
eHQ7CisgICAgICAgIGlmICh0aGlzLkBtYXBJdGVyYXRpb25LaW5kID09PSBAaXRlcmF0aW9uS2lu
ZEtleVZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHtkb25lOiBmYWxzZSwgdmFsdWU6IFtsaXN0
TmV4dC5rZXksIGxpc3ROZXh0LnZhbHVlXX07CisgICAgICAgIGlmICh0aGlzLkBtYXBJdGVyYXRp
b25LaW5kID09PSBAaXRlcmF0aW9uS2luZEtleSkKKyAgICAgICAgICAgIHJldHVybiB7ZG9uZTog
ZmFsc2UsIHZhbHVlOiBsaXN0TmV4dC5rZXl9OworICAgICAgICAvLyBWYWx1ZQorICAgICAgICBy
ZXR1cm4ge2RvbmU6IGZhbHNlLCB2YWx1ZTogbGlzdE5leHQudmFsdWV9OworICAgIH0KKyAgICBy
ZXR1cm4ge2RvbmU6IHRydWV9OworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0
aW5zL01hcFByb3RvdHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnVpbHRpbnMvTWFwUHJvdG90eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxNiBZdXN1a2UgU3V6dWtpIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+LgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcs
NyArMjgsNyBAQCBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovCiB7CiAg
ICAgInVzZSBzdHJpY3QiOwogCi0gICAgaWYgKCFAaXNNYXAodGhpcykpCisgICAgaWYgKCFAaXNK
U01hcCh0aGlzKSkKICAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24g
Y2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CiAKICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9
PSAnZnVuY3Rpb24nKQpAQCAtNDQsMyArNDUsMjAwIEBAIGZ1bmN0aW9uIGZvckVhY2goY2FsbGJh
Y2sgLyosIHRoaXNBcmcgKi8KICAgICAgICAgY2FsbGJhY2suQGNhbGwodGhpc0FyZywgdmFsdWVb
MV0sIHZhbHVlWzBdLCB0aGlzKTsKICAgICB9CiB9CisKK2Z1bmN0aW9uIGdldChrZXkpCit7Cisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhy
b3cgbmV3IEBUeXBlRXJyb3IoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0
Iik7CisKKyAgICBsZXQgdGFibGUgPSB0aGlzLkBtYXBUYWJsZTsKKyAgICBsZXQgdGFibGVMZW4g
PSB0YWJsZS5sZW5ndGg7IAorICAgIGxldCBtYXNrID0gdGFibGVMZW4gLSAxOworICAgIGxldCBo
YXNoID0gQGpzTWFwSGFzaChrZXkpICYgbWFzazsKKyAgICBsZXQgYnVja2V0ID0gdGFibGVbaGFz
aF07CisgICAgLy9sZXQgYWRkZXIgPSAxOworICAgIHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAg
bGV0IGJ1Y2tldEtleSA9IGJ1Y2tldC5rZXk7CisgICAgICAgIGlmICgoYnVja2V0S2V5ID09PSBr
ZXkgfHwgKGJ1Y2tldEtleSAhPT0gYnVja2V0S2V5ICYmIGtleSAhPT0ga2V5KSkgJiYgIWJ1Y2tl
dC5kZWxldGVkKQorICAgICAgICAgICAgcmV0dXJuIGJ1Y2tldC52YWx1ZTsKKyAgICAgICAgaGFz
aCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAgICAvL2hhc2ggPSAoaGFzaCArIGFkZGVyKioy
KSAmIG1hc2s7CisgICAgICAgIGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2FkZGVy
Kys7CisgICAgfQorICAgIHJldHVybiBAdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBoYXMoa2V5
KQoreworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAg
ICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFw
IG9iamVjdCIpOworCisgICAgbGV0IHRhYmxlID0gdGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRh
YmxlTGVuID0gdGFibGUubGVuZ3RoOyAKKyAgICBsZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAg
ICBsZXQgaGFzaCA9IEBqc01hcEhhc2goa2V5KSAmIG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRh
YmxlW2hhc2hdOworICAgIC8vbGV0IGFkZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7Cisg
ICAgICAgIGxldCBidWNrZXRLZXkgPSBidWNrZXQua2V5OworICAgICAgICBpZiAoKGJ1Y2tldEtl
eSA9PT0ga2V5IHx8IChidWNrZXRLZXkgIT09IGJ1Y2tldEtleSAmJiBrZXkgIT09IGtleSkpICYm
ICFidWNrZXQuZGVsZXRlZCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvL2hh
c2ggPSAoaGFzaCArIGFkZGVyKioyKSAmIG1hc2s7CisgICAgICAgIGhhc2ggPSAoaGFzaCArIDEp
ICYgbWFzazsKKyAgICAgICAgYnVja2V0ID0gdGFibGVbaGFzaF07CisgICAgICAgIC8vYWRkZXIr
KzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBkZWxldGUoa2V5KQor
eworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAg
IHRocm93IG5ldyBAVHlwZUVycm9yKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9i
amVjdCIpOworCisgICAgbGV0IHRhYmxlID0gdGhpcy5AbWFwVGFibGU7CisgICAgbGV0IHRhYmxl
TGVuID0gdGFibGUubGVuZ3RoOyAKKyAgICBsZXQgbWFzayA9IHRhYmxlTGVuIC0gMTsKKyAgICBs
ZXQgaGFzaCA9IEBqc01hcEhhc2goa2V5KSAmIG1hc2s7CisgICAgbGV0IGJ1Y2tldCA9IHRhYmxl
W2hhc2hdOworICAgIC8vbGV0IGFkZGVyID0gMTsKKyAgICB3aGlsZSAoYnVja2V0KSB7CisgICAg
ICAgIGxldCBidWNrZXRLZXkgPSBidWNrZXQua2V5OworICAgICAgICBpZiAoKGJ1Y2tldC5rZXkg
PT09IGtleSB8fCAoYnVja2V0S2V5ICE9PSBidWNrZXRLZXkgJiYga2V5ICE9PSBrZXkpICYmICFi
dWNrZXQuZGVsZXRlZCkgeworICAgICAgICAgICAgYnVja2V0LmRlbGV0ZWQgPSB0cnVlOworICAg
ICAgICAgICAgYnVja2V0Lmxpc3ROZXh0Lmxpc3RQcmV2ID0gYnVja2V0Lmxpc3RQcmV2OworICAg
ICAgICAgICAgYnVja2V0Lmxpc3RQcmV2Lmxpc3ROZXh0ID0gYnVja2V0Lmxpc3ROZXh0OworICAg
ICAgICAgICAgKyt0aGlzLkBtYXBEZWxldGVDb3VudDsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgICAgIC8vaGFzaCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsK
KyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkgJiBtYXNrOworICAgICAgICBidWNrZXQgPSB0YWJs
ZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CisK
K30KKworQGdsb2JhbFByaXZhdGUKK2Z1bmN0aW9uIGpzTWFwUmVoYXNoKG1hcCwgb2xkTGVuKQor
eworICAgIHRoaXMuQG1hcFNpemUgPSB0aGlzLkBtYXBTaXplIC0gdGhpcy5AbWFwRGVsZXRlQ291
bnQ7CisgICAgdGhpcy5AbWFwRGVsZXRlQ291bnQgPSAwOworICAgIGxldCBuZXdTaXplID0gb2xk
TGVuICogMjsKKyAgICBsZXQgdGFibGUgPSBuZXcgQEFycmF5KG5ld1NpemUpOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgdGFibGUubGVuZ3RoOyBpKyspCisgICAgICAgIHRhYmxlW2ldID0gQHVu
ZGVmaW5lZDsKKyAgICBtYXAuQG1hcFRhYmxlID0gdGFibGU7CisgICAgbGV0IG1hc2sgPSBuZXdT
aXplIC0gMTsKKyAgICBsZXQgbm9kZSA9IG1hcC5AbWFwSGVhZC5saXN0TmV4dDsKKyAgICBsZXQg
bmV4dE5vZGUgPSBub2RlLmxpc3ROZXh0OworICAgIHdoaWxlIChuZXh0Tm9kZSkgeworICAgICAg
ICBsZXQga2V5ID0gbm9kZS5rZXk7CisgICAgICAgIGxldCBoYXNoID0gQGpzTWFwSGFzaChrZXkp
ICYgbWFzazsKKyAgICAgICAgbGV0IGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAvL2xl
dCBhZGRlciA9IDE7CisgICAgICAgIHdoaWxlIChidWNrZXQpIHsKKyAgICAgICAgICAgIC8vaGFz
aCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsKKyAgICAgICAgICAgIGhhc2ggPSAoaGFzaCAr
IDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tldCA9IHRhYmxlW2hhc2hdOworICAgICAgICAg
ICAgLy9hZGRlcisrOworICAgICAgICB9CisKKyAgICAgICAgdGFibGVbaGFzaF0gPSBub2RlOwor
ICAgICAgICBub2RlID0gbmV4dE5vZGU7CisgICAgICAgIG5leHROb2RlID0gbmV4dE5vZGUubGlz
dE5leHQ7CisgICAgfQorfQorCitmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkKK3sKKyAgICAidXNl
IHN0cmljdCI7CisKKyAgICBpZiAoIUBpc0pTTWFwKHRoaXMpKQorICAgICAgICB0aHJvdyBuZXcg
QFR5cGVFcnJvcigiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKTsKKwor
ICAgIGxldCB0YWJsZSA9IHRoaXMuQG1hcFRhYmxlOworICAgIGxldCB0YWJsZUxlbiA9IHRhYmxl
Lmxlbmd0aDsgCisgICAgbGV0IG1hc2sgPSB0YWJsZUxlbiAtIDE7CisgICAgbGV0IGhhc2ggPSBA
anNNYXBIYXNoKGtleSkgJiBtYXNrOworICAgIGxldCBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAg
ICAvL2xldCBhZGRlciA9IDE7CisgICAgd2hpbGUgKGJ1Y2tldCkgeworICAgICAgICBsZXQgYnVj
a2V0S2V5ID0gYnVja2V0LmtleTsKKyAgICAgICAgaWYgKGJ1Y2tldC5rZXkgPT09IGtleSB8fCAo
YnVja2V0S2V5ICE9PSBidWNrZXRLZXkgJiYga2V5ICE9PSBrZXkpKSB7CisgICAgICAgICAgICBi
dWNrZXQudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgIGJ1Y2tldC5kZWxldGVkID0gZmFsc2U7
IC8vIE1heWJlIHdlIHdlcmUgZGVsZXRlZCBiZWZvcmUsIGJ1dCB3ZSBhcmUgbm90IGFueW1vcmUu
CisgICAgICAgICAgICArK3RoaXMuQG1hcFNpemU7CisgICAgICAgICAgICAtLXRoaXMuQG1hcERl
bGV0ZUNvdW50OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vaGFz
aCA9IChoYXNoICsgYWRkZXIqKjIpICYgbWFzazsKKyAgICAgICAgaGFzaCA9IChoYXNoICsgMSkg
JiBtYXNrOworICAgICAgICBidWNrZXQgPSB0YWJsZVtoYXNoXTsKKyAgICAgICAgLy9hZGRlcisr
OworICAgIH0KKworICAgIGxldCBtYXBUYWlsID0gdGhpcy5AbWFwVGFpbDsKKyAgICBsZXQgbmV3
SXRlbSA9IHsKKyAgICAgICAgbGlzdE5leHQ6IG1hcFRhaWwsCisgICAgICAgIGxpc3RQcmV2OiBt
YXBUYWlsLmxpc3RQcmV2LAorICAgICAgICBrZXk6IGtleSwKKyAgICAgICAgdmFsdWU6IHZhbHVl
LAorICAgICAgICBkZWxldGVkOiBmYWxzZQorICAgIH07CisgICAgbWFwVGFpbC5saXN0UHJldiA9
IG5ld0l0ZW07CisgICAgbmV3SXRlbS5saXN0UHJldi5saXN0TmV4dCA9IG5ld0l0ZW07CisKKyAg
ICB0YWJsZVtoYXNoXSA9IG5ld0l0ZW07CisKKyAgICBsZXQgbmV3U2l6ZSA9ICsrdGhpcy5AbWFw
U2l6ZTsKKyAgICBpZiAoMiAqIG5ld1NpemUgPiB0YWJsZUxlbikgeyAvLyBEbyBpbnQgbXVscyBh
bmQgY29tcGFyZS4gVGhpcyBpcyBqdXN0IGNoZWNraW5nIGlmIHdlJ3JlIGZpbGxlZCB1cCBtb3Jl
IHRoYW4gMS8yLgorICAgICAgICBAanNNYXBSZWhhc2godGhpcywgdGFibGVMZW4pOworICAgIH0g
Cit9CisKK2Z1bmN0aW9uIGNsZWFyKGtleSwgdmFsdWUpCit7CisgICAgInVzZSBzdHJpY3QiOwor
CisgICAgaWYgKCFAaXNKU01hcCh0aGlzKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3Io
Ik1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iik7CisKKyAgICB0aGlzLkBt
YXBUYWJsZSA9IEBuZXdBcnJheVdpdGhTaXplKDQpOworICAgIHRoaXMuQG1hcFRhaWwubGlzdFBy
ZXYgPSB0aGlzLkBtYXBIZWFkOworICAgIHRoaXMuQG1hcEhlYWQubGlzdE5leHQgPSB0aGlzLkBt
YXBUYWlsOworICAgIHRoaXMuQG1hcFNpemUgPSAwOworICAgIHRoaXMuQG1hcERlbGV0ZUNvdW50
ID0gMDsKK30KKworZnVuY3Rpb24gbGlzdEFzQXJyYXkoKQoreworICAgICJ1c2Ugc3RyaWN0IjsK
KworICAgIGlmICghQGlzSlNNYXAodGhpcykpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9y
KCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpOworCisgICAgbGV0IHJl
c3VsdCA9IFtdOworCisgICAgbGV0IGJ1Y2tldCA9IHRoaXMuQG1hcEhlYWQ7CisgICAgd2hpbGUg
KGJ1Y2tldCkgeworICAgICAgICByZXN1bHQucHVzaCh7CisgICAgICAgICAgICBrZXk6IGJ1Y2tl
dC5rZXkgfHwgIkVNUFRZIiwKKyAgICAgICAgICAgIHZhbHVlOiBidWNrZXQudmFsdWUgfHwgIkVN
UFRZIgorICAgICAgICB9KTsKKyAgICAgICAgYnVja2V0ID0gYnVja2V0Lmxpc3ROZXh0OworICAg
IH0KKyAgICByZXR1cm4geworICAgICAgICB0YWJsZUxlbmd0aDogdGhpcy5AbWFwVGFibGUubGVu
Z3RoLAorICAgICAgICBtYXBTaXplOiB0aGlzLkBtYXBTaXplLAorICAgICAgICBhcnJheTogcmVz
dWx0CisgICAgfTsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUludHJpbnNpY1JlZ2lzdHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnkuaAkocmV2aXNpb24gMjA1MTM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlSW50cmluc2ljUmVn
aXN0cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksOCBAQCBjbGFzcyBJZGVudGlmaWVy
OwogICAgIG1hY3JvKHRvTnVtYmVyKSBcCiAgICAgbWFjcm8odG9TdHJpbmcpIFwKICAgICBtYWNy
byhuZXdBcnJheVdpdGhTaXplKSBcCisgICAgbWFjcm8oanNNYXBIYXNoKSBcCisgICAgbWFjcm8o
aXNKU01hcCkgXAogCiAjZGVmaW5lIEpTQ19DT01NT05fQllURUNPREVfSU5UUklOU0lDX0NPTlNU
QU5UU19FQUNIX05BTUUobWFjcm8pIFwKICAgICBtYWNybyh1bmRlZmluZWQpIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHJl
dmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfaXNfbnVtYmVyIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9pc19zdHJpbmciLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2lzX2pzYXJyYXkiLCAibGVuZ3RoIiA6IDMgfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2lzX2pzbWFwIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJu
YW1lIiA6ICJvcF9pc19vYmplY3QiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX2lzX29iamVjdF9vcl9udWxsIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9pc19mdW5jdGlvbiIsICJsZW5ndGgiIDogMyB9LApAQCAtMTQ2LDcg
KzE0Nyw4IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF95aWVsZCIsICJsZW5ndGgiIDog
NCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bfd2F0Y2hkb2ciLCAibGVuZ3RoIiA6IDEg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1
ZSIsICJsZW5ndGgiIDogMn0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9sb2dfc2hhZG93
X2NoaWNrZW5fdGFpbCIsICJsZW5ndGgiIDogM30KKyAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsIiwgImxlbmd0aCIgOiAzfSwKKyAgICAgICAgICAgIHsg
Im5hbWUiIDogIm9wX2pzbWFwX2hhc2giLCAibGVuZ3RoIiA6IDMgfQogICAgICAgICBdCiAgICAg
fSwKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVV
c2VEZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVVc2VEZWYuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw2ICsxNjQs
NyBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sqCiAgICAgY2FzZSBv
cF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19zdHJpbmc6CiAgICAgY2FzZSBvcF9pc19qc2Fy
cmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CiAgICAgY2FzZSBvcF9pc19vYmplY3Q6CiAgICAg
Y2FzZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoKICAgICBjYXNlIG9wX2lzX2Z1bmN0aW9uOgpAQCAt
MTgzLDYgKzE4NCw3IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldChCbG9jayoK
ICAgICBjYXNlIG9wX2dldF9wYXJlbnRfc2NvcGU6CiAgICAgY2FzZSBvcF9jcmVhdGVfc2NvcGVk
X2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgIGNhc2Ugb3BfanNtYXBf
aGFzaDoKICAgICBjYXNlIG9wX2dldF9mcm9tX2FyZ3VtZW50czogewogICAgICAgICBBU1NFUlQo
b3Bjb2RlTGVuZ3Roc1tvcGNvZGVJRF0gPiAyKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ss
IGluc3RydWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKQEAgLTM5
Nyw2ICszOTksNyBAQCB2b2lkIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoQmxvY2sqCiAg
ICAgY2FzZSBvcF9pc19udW1iZXI6CiAgICAgY2FzZSBvcF9pc19zdHJpbmc6CiAgICAgY2FzZSBv
cF9pc19qc2FycmF5OgorICAgIGNhc2Ugb3BfaXNfanNtYXA6CiAgICAgY2FzZSBvcF9pc19vYmpl
Y3Q6CiAgICAgY2FzZSBvcF9pc19vYmplY3Rfb3JfbnVsbDoKICAgICBjYXNlIG9wX2lzX2Z1bmN0
aW9uOgpAQCAtNDQyLDYgKzQ0NSw3IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNl
dChCbG9jayoKICAgICBjYXNlIG9wX3Vuc2lnbmVkOgogICAgIGNhc2Ugb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzOiAKICAgICBjYXNlIG9wX2NyZWF0ZV9yZXN0OgorICAgIGNhc2Ugb3BfanNtYXBfaGFz
aDoKICAgICBjYXNlIG9wX2dldF9yZXN0X2xlbmd0aDogewogICAgICAgICBBU1NFUlQob3Bjb2Rl
TGVuZ3Roc1tvcGNvZGVJRF0gPiAxKTsKICAgICAgICAgZnVuY3Rvcihjb2RlQmxvY2ssIGluc3Ry
dWN0aW9uLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTEwOCw2ICsxMTA4LDE0IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0
ZWNvZGUoCiAgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJpc19qc2FycmF5Iik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBj
YXNlIG9wX2lzX2pzbWFwOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Aob3V0LCBleGVjLCBs
b2NhdGlvbiwgaXQsICJpc19qc21hcCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBvcF9qc21hcF9oYXNoOiB7CisgICAgICAgICAgICBwcmludFVuYXJ5T3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJqc21hcF9oYXNoIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2lzX29iamVjdDogewogICAgICAgICAgICAg
cHJpbnRVbmFyeU9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiaXNfb2JqZWN0Iik7CiAgICAg
ICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EYXRh
Rm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Rh
dGFGb3JtYXQuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0RhdGFGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOCBAQCBlbnVt
IERhdGFGb3JtYXQgewogICAgIERhdGFGb3JtYXRCb29sZWFuID0gNSwKICAgICBEYXRhRm9ybWF0
Q2VsbCA9IDYsCiAgICAgRGF0YUZvcm1hdFN0b3JhZ2UgPSA3LAotICAgIERhdGFGb3JtYXRKUyA9
IDgsCisgICAgRGF0YUZvcm1hdE1hcEJ1Y2tldCA9IDgsCisgICAgRGF0YUZvcm1hdEpTID0gMTYs
CiAgICAgRGF0YUZvcm1hdEpTSW50MzIgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50MzIs
CiAgICAgRGF0YUZvcm1hdEpTRG91YmxlID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdERvdWJs
ZSwKICAgICBEYXRhRm9ybWF0SlNDZWxsID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGws
CkBAIC03Nyw2ICs3OCw4IEBAIGlubGluZSBjb25zdCBjaGFyKiBkYXRhRm9ybWF0VG9TdHJpbmco
RGEKICAgICAgICAgcmV0dXJuICJCb29sZWFuIjsKICAgICBjYXNlIERhdGFGb3JtYXRTdG9yYWdl
OgogICAgICAgICByZXR1cm4gIlN0b3JhZ2UiOworICAgIGNhc2UgRGF0YUZvcm1hdE1hcEJ1Y2tl
dDoKKyAgICAgICAgcmV0dXJuICJTdG9yYWdlIjsKICAgICBjYXNlIERhdGFGb3JtYXRKUzoKICAg
ICAgICAgcmV0dXJuICJKUyI7CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNJbnQzMjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAko
cmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUg
IkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKICNpbmNsdWRl
ICJTdHJpbmdPYmplY3QuaCIKQEAgLTM0Niw2ICszNDgsMTIgQEAgU3BlY3VsYXRlZFR5cGUgc3Bl
Y3VsYXRpb25Gcm9tQ2xhc3NJbmZvKAogCiAgICAgaWYgKGNsYXNzSW5mbyA9PSBSZWdFeHBPYmpl
Y3Q6OmluZm8oKSkKICAgICAgICAgcmV0dXJuIFNwZWNSZWdFeHBPYmplY3Q7CisKKyAgICBpZiAo
Y2xhc3NJbmZvID09IEpTTWFwOjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjTWFwT2JqZWN0
OworCisgICAgaWYgKGNsYXNzSW5mbyA9PSBKU1NldDo6aW5mbygpKQorICAgICAgICByZXR1cm4g
U3BlY1NldE9iamVjdDsKICAgICAKICAgICBpZiAoY2xhc3NJbmZvLT5pc1N1YkNsYXNzT2YoSlNG
dW5jdGlvbjo6aW5mbygpKSkKICAgICAgICAgcmV0dXJuIFNwZWNGdW5jdGlvbjsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCShyZXZp
c2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRl
ZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNDEgKzM5LDQzIEBAIGNsYXNzIFN0cnVjdHVy
ZTsKIAogdHlwZWRlZiB1aW50NjRfdCBTcGVjdWxhdGVkVHlwZTsKIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjTm9uZSAgICAgICAgICAgICAgID0gMDsgLy8gV2UgZG9uJ3Qga25vdyBh
bnl0aGluZyB5ZXQuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ZpbmFsT2JqZWN0
ICAgICAgICA9IDF1IDw8IDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRmluYWxPYmplY3QuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FycmF5ICAgICAgICAgICAgICA9IDF1IDw8
IDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQXJyYXkuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0Z1bmN0aW9uICAgICAgICAgICA9IDF1IDw8IDI7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhIEpTRnVuY3Rpb24uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDhBcnJh
eSAgICAgICAgICA9IDF1IDw8IDM7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ4QXJyYXkgb3Ig
b25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJ
bnQxNkFycmF5ICAgICAgICAgPSAxdSA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MTZB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0ludDMyQXJyYXkgICAgICAgICA9IDF1IDw8IDU7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQzMkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjVWludDhBcnJheSAgICAgICAgID0gMXUgPDwgNjsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIFVpbnQ4QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OENsYW1wZWRBcnJheSAgPSAxdSA8PCA3OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFz
c2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJheSAgICAgICAg
PSAxdSA8PCA4OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0
cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MzJBcnJh
eSAgICAgICAgPSAxdSA8PCA5OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDMyQXJyYXkgb3Ig
b25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNG
bG9hdDMyQXJyYXkgICAgICAgPSAxdSA8PCAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQx
NkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXUgPDwgMTE7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0ZpbmFsT2JqZWN0ICAgICAgICA9IDF1bGwgPDwgMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjQXJyYXkgICAgICAgICAgICAgID0gMXVsbCA8PCAxOyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBKU0FycmF5Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGdW5jdGlvbiAgICAg
ICAgICAgPSAxdWxsIDw8IDI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTRnVuY3Rpb24uCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDhBcnJheSAgICAgICAgICA9IDF1bGwgPDwg
MzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNz
ZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9
IDF1bGwgPDwgNDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDE2QXJyYXkgb3Igb25lIG9mIGl0
cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMkFycmF5
ICAgICAgICAgPSAxdWxsIDw8IDU7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMkFycmF5IG9y
IG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
VWludDhBcnJheSAgICAgICAgID0gMXVsbCA8PCA2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWlu
dDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5ICA9IDF1bGwgPDwgNzsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIFVpbnQ4Q2xhbXBlZEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDE2QXJyYXkgICAgICAgID0gMXVsbCA8PCA4
OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFz
c2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MzJBcnJheSAgICAgICAg
PSAxdWxsIDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MzJBcnJheSBvciBvbmUgb2Yg
aXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Zsb2F0MzJB
cnJheSAgICAgICA9IDF1bGwgPDwgMTA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJh
eSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0Zsb2F0NjRBcnJheSAgICAgICA9IDF1bGwgPDwgMTE7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1R5cGVkQXJyYXlWaWV3ICAgICA9IFNwZWNJbnQ4QXJyYXkgfCBTcGVj
SW50MTZBcnJheSB8IFNwZWNJbnQzMkFycmF5IHwgU3BlY1VpbnQ4QXJyYXkgfCBTcGVjVWludDhD
bGFtcGVkQXJyYXkgfCBTcGVjVWludDE2QXJyYXkgfCBTcGVjVWludDMyQXJyYXkgfCBTcGVjRmxv
YXQzMkFycmF5IHwgU3BlY0Zsb2F0NjRBcnJheTsKLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjRGlyZWN0QXJndW1lbnRzICAgID0gMXUgPDwgMTI7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IERpcmVjdEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y1Njb3BlZEFyZ3VtZW50cyAgICA9IDF1IDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdPYmplY3QgICAgICAgPSAxdSA8PCAxNDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3RyaW5nT2Jq
ZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNSZWdFeHBPYmplY3QgICAgICAg
PSAxdSA8PCAxNTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgUmVnRXhwT2JqZWN0IChhbmQgbm90IGFu
eSBzdWJjbGFzcyBvZiBSZWdFeHBPYmplY3QpLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNPYmplY3RPdGhlciAgICAgICAgPSAxdSA8PCAxNjsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJyYXksIG9yIEpTRnVuY3Rpb24uCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdCAgICAgICAgICAgICA9IFNwZWNG
aW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNGdW5jdGlvbiB8IFNwZWNUeXBlZEFycmF5Vmll
dyB8IFNwZWNEaXJlY3RBcmd1bWVudHMgfCBTcGVjU2NvcGVkQXJndW1lbnRzIHwgU3BlY1N0cmlu
Z09iamVjdCB8IFNwZWNSZWdFeHBPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7IC8vIEJpdG1hc2sg
dXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCi1zdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDF1IDw8IDE3
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nVmFyICAgICAgICAgID0gMXUg
PDwgMTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBub3QgYW4gaWRl
bnRpZmllci4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRGlyZWN0QXJndW1lbnRz
ICAgID0gMXVsbCA8PCAxMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9i
amVjdC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAg
ID0gMXVsbCA8PCAxMzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU2NvcGVkQXJndW1lbnRzIG9iamVj
dC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nT2JqZWN0ICAgICAgID0g
MXVsbCA8PCAxNDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3RyaW5nT2JqZWN0Lgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNSZWdFeHBPYmplY3QgICAgICAgPSAxdWxsIDw8IDE1OyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBSZWdFeHBPYmplY3QgKGFuZCBub3QgYW55IHN1YmNsYXNzIG9m
IFJlZ0V4cE9iamVjdCkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY01hcE9iamVj
dCAgICAgICAgICA9IDF1bGwgPDwgMTY7IC8vIEl0J3MgZGVmaW5pdGVseSBNYXAgb2JqZWN0IChj
YW4gaXQgYmUgYSBzdWJjbGFzcz8gRklYTUUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNTZXRPYmplY3QgICAgICAgICAgPSAxdWxsIDw8IDE3OyAvLyBJdCdzIGRlZmluaXRlbHkg
cyBTZXQgb2JqZWN0IChjYW4gaXQgYmUgYSBzdWJjbGFzcz8gRklYTUUpLgorc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3RPdGhlciAgICAgICAgPSAxdWxsIDw8IDE4OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJheSwg
b3IgSlNGdW5jdGlvbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0ICAg
ICAgICAgICAgID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwg
U3BlY1R5cGVkQXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1
bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNNYXBPYmpl
Y3QgfCBTcGVjU2V0T2JqZWN0IHwgU3BlY09iamVjdE90aGVyOyAvLyBCaXRtYXNrIHVzZWQgZm9y
IHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgorc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAxdWxsIDw8IDE5OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3MgYW4gaWRlbnRpZmllci4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nVmFyICAgICAgICAgID0gMXVsbCA8PCAy
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlm
aWVyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmcgICAgICAgICAgICAg
PSBTcGVjU3RyaW5nSWRlbnQgfCBTcGVjU3RyaW5nVmFyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBK
U1N0cmluZy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3ltYm9sICAgICAgICAg
ICAgID0gMXUgPDwgMTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN5bWJvbC4KLXN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMXUgPDwgMjA7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIEpTQ2VsbCBidXQgbm90IGEgc3ViY2xhc3Mgb2YgSlNPYmplY3QgYW5k
IGRlZmluaXRlbHkgbm90IGEgSlNTdHJpbmcgb3IgYSBTeW1ib2wuIEZJWE1FOiBUaGlzIHNob3Vs
ZG4ndCBiZSBwYXJ0IG9mIGhlYXAtdG9wIG9yIGJ5dGVjb2RlLXRvcC4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA3OAorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNTeW1ib2wgICAgICAgICAgICAgPSAxdWxsIDw8IDIxOyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBTeW1ib2wuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGxPdGhlciAg
ICAgICAgICA9IDF1bGwgPDwgMjI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbCBidXQgbm90
IGEgc3ViY2xhc3Mgb2YgSlNPYmplY3QgYW5kIGRlZmluaXRlbHkgbm90IGEgSlNTdHJpbmcgb3Ig
YSBTeW1ib2wuIEZJWE1FOiBUaGlzIHNob3VsZG4ndCBiZSBwYXJ0IG9mIGhlYXAtdG9wIG9yIGJ5
dGVjb2RlLXRvcC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA3
OAogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsICAgICAgICAgICAgICAgPSBT
cGVjT2JqZWN0IHwgU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQ2VsbE90aGVyOyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBKU0NlbGwuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0Jvb2xJbnQzMiAgICAgICAgICA9IDF1IDw8IDIxOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50
MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05v
bkJvb2xJbnQzMiAgICAgICA9IDF1IDw8IDIyOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIg
d2l0aCB2YWx1ZSBvdGhlciB0aGFuIDAgb3IgMS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXVsbCA8PCAyMzsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIEludDMyIHdpdGggdmFsdWUgMCBvciAxLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNOb25Cb29sSW50MzIgICAgICAgPSAxdWxsIDw8IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gSW50MzIgd2l0aCB2YWx1ZSBvdGhlciB0aGFuIDAgb3IgMS4KIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjSW50MzJPbmx5ICAgICAgICAgID0gU3BlY0Jvb2xJbnQzMiB8IFNwZWNO
b25Cb29sSW50MzI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMi4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXUgPDwgMjM7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBJbnQ1MiBhbmQgd2UgaW50ZW5kIGl0IHRvIHVuYm94IGl0LiBJdCdzIGFs
c28gZGVmaW5pdGVseSBub3QgYW4gSW50MzIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0ludDUyT25seSAgICAgICAgICA9IDF1bGwgPDwgMjU7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQ1MiBhbmQgd2UgaW50ZW5kIGl0IHRvIHVuYm94IGl0LiBJdCdzIGFsc28gZGVmaW5pdGVs
eSBub3QgYW4gSW50MzIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludCAg
ICAgICAgICAgICA9IFNwZWNJbnQzMk9ubHkgfCBTcGVjSW50NTJPbmx5OyAvLyBJdCdzIHNvbWV0
aGluZyB0aGF0IHdlIGNhbiBkbyBtYWNoaW5lIGludCBhcml0aG1ldGljIG9uLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdSA8PCAyNDsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCBpdCdzIGluc2lkZSBhIGRvdWJsZS4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTm9uSW50QXNEb3VibGUgICAgID0gMXUgPDwgMjU7
IC8vIEl0J3MgZGVmaW5pdGVseSBub3QgYW4gSW50NTIgYnV0IGl0J3MgYSByZWFsIG51bWJlciBh
bmQgaXQncyBhIGRvdWJsZS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQW55SW50
QXNEb3VibGUgICAgID0gMXVsbCA8PCAyNjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFu
ZCBpdCdzIGluc2lkZSBhIGRvdWJsZS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
Tm9uSW50QXNEb3VibGUgICAgID0gMXVsbCA8PCAyNzsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBh
biBJbnQ1MiBidXQgaXQncyBhIHJlYWwgbnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgogc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVSZWFsICAgICAgICAgPSBTcGVjTm9uSW50
QXNEb3VibGUgfCBTcGVjQW55SW50QXNEb3VibGU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIG5vbi1O
YU4gZG91YmxlLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFO
ICAgICAgPSAxdSA8PCAyNjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgTmFOIHRoYXQgaXMgc2FlIHRv
IHRhZyAoaS5lLiBwdXJlKS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91Ymxl
SW1wdXJlTmFOICAgID0gMXUgPDwgMjc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIE5hTiB0aGF0IGlz
IHVuc2FmZSB0byB0YWcgKGkuZS4gaW1wdXJlKS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjRG91YmxlUHVyZU5hTiAgICAgID0gMXVsbCA8PCAyODsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgTmFOIHRoYXQgaXMgc2FlIHRvIHRhZyAoaS5lLiBwdXJlKS4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRG91YmxlSW1wdXJlTmFOICAgID0gMXVsbCA8PCAyOTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgTmFOIHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgogc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVOYU4gICAgICAgICAgPSBTcGVjRG91
YmxlUHVyZU5hTiB8IFNwZWNEb3VibGVJbXB1cmVOYU47IC8vIEl0J3MgZGVmaW5pdGVseSBzb21l
IGtpbmQgb2YgTmFOLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZURv
dWJsZSAgICAgPSBTcGVjRG91YmxlUmVhbCB8IFNwZWNEb3VibGVQdXJlTmFOOyAvLyBJdCdzIGVp
dGhlciBhIG5vbi1OYU4gb3IgYSBOYU4gZG91YmxlLCBidXQgaXQncyBkZWZpbml0ZWx5IG5vdCBp
bXB1cmUgTmFOLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGdWxsRG91YmxlICAg
ICAgICAgPSBTcGVjRG91YmxlUmVhbCB8IFNwZWNEb3VibGVOYU47IC8vIEl0J3MgZWl0aGVyIGEg
bm9uLU5hTiBvciBhIE5hTiBkb3VibGUuCkBAIC04MSwxMiArODMsMTIgQEAgc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZQogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGdWxsUmVhbE51bWJlciAgICAgPSBTcGVjQW55SW50IHwgU3BlY0RvdWJsZVJlYWw7IC8v
IEl0J3MgZWl0aGVyIGFuIEludDMyIG9yIGEgRG91YmxlUmVhbCwgb3IgYSBJbnQ1Mi4KIHN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVOdW1iZXIgICAgID0gU3BlY0ludDMy
T25seSB8IFNwZWNCeXRlY29kZURvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBE
b3VibGUsIGFuZCB0aGUgRG91YmxlIGNhbm5vdCBiZSBhbiBpbXB1cmUgTmFOLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGdWxsTnVtYmVyICAgICAgICAgPSBTcGVjQW55SW50IHwg
U3BlY0Z1bGxEb3VibGU7IC8vIEl0J3MgZWl0aGVyIGFuIEludDMyLCBJbnQ1Miwgb3IgYSBEb3Vi
bGUsIGFuZCB0aGUgRG91YmxlIGNhbiBiZSBpbXB1cmUgTmFOLgotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNCb29sZWFuICAgICAgICAgICAgPSAxdSA8PCAyODsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgQm9vbGVhbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIg
ICAgICAgICAgICAgID0gMXUgPDwgMjk7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgTnVsbCBv
ciBVbmRlZmluZWQuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAg
ICAgICAgICA9IDF1bGwgPDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJvb2xlYW4uCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAgICA9IDF1bGwgPDwg
MzE7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgTnVsbCBvciBVbmRlZmluZWQuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY01pc2MgICAgICAgICAgICAgICA9IFNwZWNCb29sZWFu
IHwgU3BlY090aGVyOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIGEgYm9vbGVhbiwgTnVsbCwg
b3IgVW5kZWZpbmVkLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNIZWFwVG9wICAg
ICAgICAgICAgPSBTcGVjQ2VsbCB8IFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNNaXNjOyAvLyBJ
dCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50NTJPbmx5IGFuZCBT
cGVjRG91YmxlSW1wdXJlTmFOLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNQcmlt
aXRpdmUgICAgICAgICAgPSBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNNaXNjOyAvLyBJdCdzIGFueSBub24tT2JqZWN0IEpTVmFsdWUuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDF1IDw8IDMwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gZW1wdHkgdmFsdWUgbWFya2VyLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAgPSAxdWxsIDw8IDMyOyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gZW1wdHkgdmFsdWUgbWFya2VyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNCeXRlY29kZVRvcCAgICAgICAgPSBTcGVjSGVhcFRvcCB8IFNwZWNFbXB0eTsg
Ly8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3BlY0ludDUyT25seSBh
bmQgU3BlY0RvdWJsZUltcHVyZU5hTi4gQ29ycmVzcG9uZHMgdG8gd2hhdCBjb3VsZCBiZSBmb3Vu
ZCBpbiBhIGJ5dGVjb2RlIGxvY2FsLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNG
dWxsVG9wICAgICAgICAgICAgPSBTcGVjQnl0ZWNvZGVUb3AgfCBTcGVjRnVsbE51bWJlcjsgLy8g
SXQgY2FuIGJlIGFueXRoaW5nIHRoYXQgYnl0ZWNvZGUgY291bGQgc2VlIHBsdXMgZXhvdGljIGVu
Y29kaW5ncyBvZiBudW1iZXJzLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFsdWVSZWNvdmVyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3
Myw3ICsxNzMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUKGRhdGFGb3JtYXQgIT0gRGF0YUZv
cm1hdE5vbmUgJiYgZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAg
ICBBU1NFUlQoZGF0YUZvcm1hdCAhPSBEYXRhRm9ybWF0Tm9uZSAmJiBkYXRhRm9ybWF0ICE9IERh
dGFGb3JtYXRTdG9yYWdlICYmIGRhdGFGb3JtYXQgIT0gRGF0YUZvcm1hdE1hcEJ1Y2tldCk7CiAg
ICAgICAgICAgICByZXN1bHQubV90ZWNobmlxdWUgPSBEaXNwbGFjZWRJbkpTU3RhY2s7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gMjA1
MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MzEsNiArNjMxLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogaW5kZXgpOwogCiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc0pTQXJyYXko
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpIHsgcmV0dXJuIGVtaXRVbmFyeU9wKG9w
X2lzX2pzYXJyYXksIGRzdCwgc3JjKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNKU01h
cChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykgeyByZXR1cm4gZW1pdFVuYXJ5T3Ao
b3BfaXNfanNtYXAsIGRzdCwgc3JjKTsgfQorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SlNNYXBI
YXNoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKSB7IHJldHVybiBlbWl0VW5hcnlP
cChvcF9qc21hcF9oYXNoLCBkc3QsIHNyYyk7IH0KICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElz
T2JqZWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKICAgICAgICAgUmVnaXN0
ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzRW1wdHkoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NjQsNiArOTY0LDI3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlSW50cmluc2ljTm9kZTo6ZW1p
dF8KICAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbi5nZXQoKTsKIH0KIAorUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVJbnRyaW5zaWNOb2RlOjplbWl0X2ludHJpbnNpY19qc01hcEhhc2goSlNDOjpCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBKU0M6OlJlZ2lzdGVySUQqIGRzdCkKK3sKKyAgICBB
cmd1bWVudExpc3ROb2RlKiBub2RlID0gbV9hcmdzLT5tX2xpc3ROb2RlOworICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBzaXplID0gZ2VuZXJhdG9yLmVtaXROb2RlKG5vZGUpOworICAgIEFTU0VSVCgh
bm9kZS0+bV9uZXh0KTsKKworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9u
ID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEpT
TWFwSGFzaChmaW5hbERlc3RpbmF0aW9uLmdldCgpLCBzaXplLmdldCgpKTsKKyAgICByZXR1cm4g
ZmluYWxEZXN0aW5hdGlvbi5nZXQoKTsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVJbnRyaW5z
aWNOb2RlOjplbWl0X2ludHJpbnNpY19pc0pTTWFwKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgSlNDOjpSZWdpc3RlcklEKiBkc3QpCit7CisgICAgQXJndW1lbnRMaXN0Tm9kZSog
bm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc2l6ZSA9
IGdlbmVyYXRvci5lbWl0Tm9kZShub2RlKTsKKyAgICBBU1NFUlQoIW5vZGUtPm1fbmV4dCk7CisK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0aW5hdGlvbiA9IGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCk7CisgICAgZ2VuZXJhdG9yLmVtaXRJc0pTTWFwKGZpbmFsRGVzdGlu
YXRpb24uZ2V0KCksIHNpemUuZ2V0KCkpOworICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uLmdl
dCgpOworfQogCiAjZGVmaW5lIEpTQ19ERUNMQVJFX0JZVEVDT0RFX0lOVFJJTlNJQ19DT05TVEFO
VF9HRU5FUkFUT1JTKG5hbWUpIFwKICAgICBSZWdpc3RlcklEKiBCeXRlY29kZUludHJpbnNpY05v
ZGU6OmVtaXRfaW50cmluc2ljXyMjbmFtZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBS
ZWdpc3RlcklEKiBkc3QpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYgKzk3NywyMCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgSlNNYXBIYXNoOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdldEpTTWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXNOb25FbXB0eUpT
TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNKU0FycmF5
OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC05ODcsNiArMTAwMSw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIElzT2JqZWN0T3JOdWxsOgog
ICAgIGNhc2UgSXNGdW5jdGlvbjoKICAgICBjYXNlIElzUmVnRXhwT2JqZWN0OgorICAgIGNhc2Ug
SXNKU01hcDoKICAgICBjYXNlIElzVHlwZWRBcnJheVZpZXc6IHsKICAgICAgICAgQWJzdHJhY3RW
YWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAoY2hpbGQu
dmFsdWUoKSkgewpAQCAtOTk1LDYgKzEwMTAsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBjYXNlIElzSlNBcnJheToKICAgICAgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQudmFsdWUoKS5pc09iamVjdCgp
ICYmIGNoaWxkLnZhbHVlKCkuZ2V0T2JqZWN0KCktPnR5cGUoKSA9PSBBcnJheVR5cGUpKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oY2hpbGQudmFsdWUoKS5pc09iamVj
dCgpICYmIGNoaWxkLnZhbHVlKCkuZ2V0T2JqZWN0KCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAg
ICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNCb29sZWFuKAogICAgICAgICAgICAg
ICAgICAgICBjaGlsZC52YWx1ZSgpLmlzQ2VsbCgpCkBAIC0xMjM2LDYgKzEyNTQsOSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBicmVhazsKIAorICAgICAgICBjYXNlIElzSlNNYXA6CisgICAgICAgICAgICBicmVh
azsKKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTI4ODMsNyArMjkwNCw2IEBAIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgog
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZSh1bnNp
Z25lZCBpbmRleEluQmxvY2spCiB7CiAgICAgTm9kZSogbm9kZSA9IG1fc3RhdGUuYmxvY2soKS0+
YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAKICAgICBzdGFydEV4ZWN1dGluZygpOwogICAgIGV4ZWN1
dGVFZGdlcyhub2RlKTsKICAgICByZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBu
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUzOCw2ICsyNTM4LDQ4
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGdldChvcGVyYW5kKSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KKworICAgIGNhc2UgSlNNYXBHZXRJbnRyaW5zaWM6IHsK
KyAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGluc2VydENoZWNrcygpOworCisgICAgICAgIE5vZGUq
IG1hcCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkp
OworICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwg
cmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoSlNNYXBI
YXNoLCBrZXkpOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldEpTTWFwQnVj
a2V0LCBPcEluZm8oMCksIG1hcCwga2V5LCBoYXNoKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0g
YWRkVG9HcmFwaChMb2FkRnJvbUpTTWFwQnVja2V0LCBtYXAsIGJ1Y2tldCk7CisgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGNhc2UgSlNNYXBIYXNJbnRyaW5zaWM6IHsKKyAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGluc2VydENoZWNrcygpOworCisgICAgICAgIE5vZGUqIG1hcCA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAg
ICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJP
ZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoSlNNYXBIYXNoLCBrZXkp
OworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldEpTTWFwQnVja2V0LCBPcElu
Zm8oMCksIG1hcCwga2V5LCBoYXNoKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFw
aChJc05vbkVtcHR5SlNNYXBCdWNrZXQsIGJ1Y2tldCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGNhc2UgSlNTZXRIYXNJbnRyaW5zaWM6IHsKKyAgICAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGluc2VydENoZWNrcygpOworCisgICAgICAgIE5vZGUqIGpzU2V0ID0gZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGtl
eSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwor
ICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChKU01hcEhhc2gsIGtleSk7CisgICAgICAg
IE5vZGUqIGJ1Y2tldCA9IGFkZFRvR3JhcGgoR2V0SlNNYXBCdWNrZXQsIE9wSW5mbygxKSwganNT
ZXQsIGtleSwgaGFzaCk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoSXNOb25F
bXB0eUpTTWFwQnVja2V0LCBidWNrZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJl
c3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAg
ICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM5NDgsNiArMzk5
MCwxOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9pc19qc2FycmF5KTsKICAgICAgICAgfQogCisgICAgICAgIGNh
c2Ugb3BfaXNfanNtYXA6IHsKKyAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRU
b0dyYXBoKElzSlNNYXAsIHZhbHVlKSk7CisgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pc19q
c21hcCk7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIG9wX2pzbWFwX2hhc2g6IHsKKyAgICAg
ICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTTWFwSGFzaCwgdmFsdWUp
KTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2pzbWFwX2hhc2gpOworICAgICAgICB9CisK
ICAgICAgICAgY2FzZSBvcF9pc19vYmplY3Q6IHsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0g
Z2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpLCBhZGRUb0dyYXBoKElzT2JqZWN0LCB2YWx1ZSkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA1MTM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIsNiArMTQyLDggQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZl
bChPcGNvZGVJRAogICAgIGNhc2Ugb3BfaXNfbnVtYmVyOgogICAgIGNhc2Ugb3BfaXNfc3RyaW5n
OgogICAgIGNhc2Ugb3BfaXNfanNhcnJheToKKyAgICBjYXNlIG9wX2lzX2pzbWFwOgorICAgIGNh
c2Ugb3BfanNtYXBfaGFzaDoKICAgICBjYXNlIG9wX2lzX29iamVjdDoKICAgICBjYXNlIG9wX2lz
X29iamVjdF9vcl9udWxsOgogICAgIGNhc2Ugb3BfaXNfZnVuY3Rpb246CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMjA1MTM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE2MCw2ICsxNjAsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlCiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDb21wYXJlRXFQdHI6CiAg
ICAgY2FzZSBJc0pTQXJyYXk6CisgICAgY2FzZSBJc0pTTWFwOgogICAgIGNhc2UgSXNFbXB0eToK
ICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29sZWFuOgpAQCAtMTI0Myw2ICsx
MjQ0LDI4IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBj
YXNlIExvZ1NoYWRvd0NoaWNrZW5UYWlsOgogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAg
ICAgICByZXR1cm47CisKKyAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1
ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldEpTTWFwQnVja2V0OiB7Cisg
ICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5j
aGlsZDEoKTsKKyAgICAgICAgRWRnZSYga2V5RWRnZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwQnVja2V0SW5kZXhMb2MsIE1pc2NGaWVsZHMsIG1hcEVk
Z2UsIGtleUVkZ2UpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7
CisgICAgICAgIEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSYg
YnVja2V0RWRnZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpT
TWFwR2V0TG9jLCBNaXNjRmllbGRzLCBtYXBFZGdlLCBidWNrZXRFZGdlKSwgTGF6eU5vZGUobm9k
ZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVj
a2V0OgorICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9u
KEpTTWFwSGFzTG9jLCBNaXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUp
KTsKKyAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1
Nyw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIElu
c3RhbmNlT2Y6CiAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgogICAgIGNhc2UgSXNKU0FycmF5
OgorICAgIGNhc2UgSXNKU01hcDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVm
aW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTE4NSw2ICsxODYsMTAgQEAgYm9vbCBkb2Vz
R0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAg
IGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgor
ICAgIGNhc2UgSlNNYXBIYXNoOgorICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAgY2FzZSBM
b2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgogICAg
IGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBj
YXNlIENoZWNrVGllclVwSW5Mb29wOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdl
LmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0
YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDc7IH0KKyAgICBzdGF0aWMgdWludDMyX3Qg
c2hpZnQoKSB7IHJldHVybiA4OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29y
ZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBL
aWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewpAQCAtMTk3LDggKzE5NywyMSBAQCBwcml2YXRl
OgogICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4gc2hp
ZnQoKSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NFUlQo
dXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VSVCgo
c3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVl
IHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2ls
bChraWxsU3RhdHVzKSA8PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjppc1Byb3Zl
ZChwcm9vZlN0YXR1cykpOworICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
TGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IHNoaWZ0
KCkpKTsKKyAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1
cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0
dXMpKTsKKyAgICAgICAgdW5pb24gRm9vIHsKKyAgICAgICAgICAgIEZvbygpIHsgd29yZCA9IDA7
IH0KKyAgICAgICAgICAgIHVpbnRwdHJfdCB3b3JkOworICAgICAgICAgICAgRWRnZSBlZGdlOwor
ICAgICAgICB9IHU7CisgICAgICAgIHUud29yZCA9IHJlc3VsdDsKKyAgICAgICAgRWRnZSByZXN1
bHRFZGdlID0gdS5lZGdlOworICAgICAgICBVTlVTRURfUEFSQU0ocmVzdWx0RWRnZSk7CisgICAg
ICAgIEFTU0VSVChyZXN1bHRFZGdlLnVzZUtpbmRVbmNoZWNrZWQoKSA9PSB1c2VLaW5kKTsKKyAg
ICAgICAgQVNTRVJUKHJlc3VsdEVkZ2Uubm9kZSgpID09IG5vZGUpOworICAgICAgICBBU1NFUlQo
cmVzdWx0RWRnZS5wcm9vZlN0YXR1c1VuY2hlY2tlZCgpID09IHByb29mU3RhdHVzKTsKKyAgICAg
ICAgQVNTRVJUKHJlc3VsdEVkZ2Uua2lsbFN0YXR1c1VuY2hlY2tlZCgpID09IGtpbGxTdGF0dXMp
OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1NDUsNiArMTU0NSwzMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIElzSlNNYXA6IHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQ2VsbCgpKQorICAgICAgICAgICAgICAg
IGZpeEVkZ2U8Q2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKworICAgICAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgICAgICAgICAgaWYg
KG5vZGUtPmlzU2V0KCkpCisgICAgICAgICAgICAgICAgZml4RWRnZTxTZXRPYmplY3RVc2U+KG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmaXhFZGdl
PE1hcE9iamVjdFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxVbnR5
cGVkVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihu
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIExvYWRG
cm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBmaXhFZGdlPE1hcE9iamVjdFVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxk
MigpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSXNOb25FbXB0eUpTTWFw
QnVja2V0OgorICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAv
LyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdl
dHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1
bWVudDoKQEAgLTE2MTYsNiArMTY0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlW
YWxXaXRoVGhpczoKICAgICAgICAgY2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNl
IENvbXBhcmVFcVB0cjoKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDUxMzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE0Myw2ICsxNDMsMTUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIExvYwogICAgIGNhc2UgUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jOgogICAgICAgICBv
dXQucHJpbnQoIlJlZ0V4cE9iamVjdExhc3RJbmRleExvYyIpOwogICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBKU01hcEJ1Y2tldEluZGV4TG9jOgorICAgICAgICBvdXQucHJpbnQoIkpTTWFwQnVj
a2V0SW5kZXhMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBHZXRMb2M6Cisg
ICAgICAgIG91dC5wcmludCgiSlNNYXBHZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSlNNYXBIYXNMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNNYXBIYXNMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShy
ZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2Nh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCwxMCBAQCBlbnVtIExvY2F0aW9uS2lu
ZCB7CiAgICAgU3RydWN0dXJlTG9jLAogICAgIFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAg
IFN0YWNrTG9jLAotICAgIFN0YWNrUGF5bG9hZExvYworICAgIFN0YWNrUGF5bG9hZExvYywKKyAg
ICBKU01hcEJ1Y2tldEluZGV4TG9jLAorICAgIEpTTWFwR2V0TG9jLAorICAgIEpTTWFwSGFzTG9j
CiB9OwogCiBjbGFzcyBIZWFwTG9jYXRpb24gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzAyLDYgKzIzMDIsMTIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9vcEluZm8uYXM8dW5zaWduZWQ+KCk7CiAgICAgfQogCisgICAgYm9v
bCBpc1NldCgpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBHZXRKU01hcEJ1
Y2tldCk7CisgICAgICAgIHJldHVybiAhIW1fb3BJbmZvLmFzPHVpbnQzMl90PigpOworICAgIH0K
KwogICAgIHZvaWQgZHVtcENoaWxkcmVuKFByaW50U3RyZWFtJiBvdXQpCiAgICAgewogICAgICAg
ICBpZiAoIWNoaWxkMSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDksNiArMzA5LDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEluc3RhbmNlT2ZDdXN0b20sIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKICAgICBtYWNybyhJc0pTQXJy
YXksIE5vZGVSZXN1bHRCb29sZWFuKSBcCisgICAgbWFjcm8oSXNKU01hcCwgTm9kZVJlc3VsdEJv
b2xlYW4pIFwKICAgICBtYWNybyhJc0VtcHR5LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1h
Y3JvKElzVW5kZWZpbmVkLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKElzQm9vbGVh
biwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKQEAgLTM4OCw3ICszODksMTIgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRvciwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1lcmF0b3JT
dHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVz
dWx0SlMpIFwKLSAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpCisgICAgbWFj
cm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAgLyogSGFzaGluZyBmb3IgSlNN
YXAgKi8gXAorICAgIG1hY3JvKEpTTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFj
cm8oR2V0SlNNYXBCdWNrZXQsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKExvYWRGcm9tSlNN
YXBCdWNrZXQsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKElzTm9uRW1wdHlKU01hcEJ1Y2tl
dCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90
b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNl
ZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQg
dmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBA
QAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50
LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKQEAgLTE3
OTEsNiArMTc5MiwyNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHluYW1pY1Zh
CiAgICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywgaWRlbnQsIEpTVmFs
dWU6OmRlY29kZSh2YWx1ZSksIHNsb3QpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSlNNYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgaW5wdXQpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWUoanNNYXBIYXNo
KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShpbnB1dCkpKTsKKyAgICBpZiAodm0uZXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiByZXN1bHQuYXNJbnQzMigpOworfQorCitK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBIYXNoTWFwQnVja2V0KiogYnVja2V0ID0ganNDYXN0PEpTTWFwKj4obWFwKS0+bV9tYXAt
PmZpbmRCdWNrZXQoZXhlYywgSlNWYWx1ZTo6ZGVjb2RlKGtleSkpOworICAgIGlmICghYnVja2V0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gKmJ1Y2tldDsKK30KKwogZXh0
ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVC
bG9jayogY29kZUJsb2NrLCBPU1JFeGl0QmFzZSogZXhpdCkKIHsKICAgICAvLyBJdCdzIHNvcnQg
b2YgcHJlZmVyYWJsZSB0aGF0IHdlIGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRv
aW5nIHNvIHdvdWxkbid0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsxNDIsOSBAQCBjaGFyKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiBKU1N0cmlu
ZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRl
KiwgaW50MzJfdCk7CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEhhc2go
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSk7CisKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3Qo
RXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc0MSw2ICs3NDEsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6CisgICAgICAgICAg
ICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiB1c2Ug
dGhlIGNhbGxzIHZhbHVlIHByb2ZpbGVyIGhlcmUuCisgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNCeXRlY29kZVRvcCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRK
U01hcEJ1Y2tldDoKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0NlbGwpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgorICAgICAg
ICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVhbik7CisgICAgICAgICAgICBicmVhazsKKwog
ICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6IHsKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTc4NCw2ICs3OTgsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIGNhc2UgSW5zdGFuY2VP
ZkN1c3RvbToKICAgICAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgICAgIGNhc2UgSXNKU01hcDoK
ICAgICAgICAgY2FzZSBJc0VtcHR5OgogICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgICAg
ICBjYXNlIElzQm9vbGVhbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxP
YmplY3RVc2U6CiAgICAgICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgorICAgICAgICBjYXNlIE1h
cE9iamVjdFVzZToKKyAgICAgICAgY2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIGNhc2UgT2Jq
ZWN0T3JPdGhlclVzZToKICAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZToKICAgICAgICAgY2Fz
ZSBTdHJpbmdVc2U6CkBAIC0yNTgsNiArMjYwLDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICBjYXNlIEluc3RhbmNl
T2ZDdXN0b206CiAgICAgY2FzZSBJc0pTQXJyYXk6CisgICAgY2FzZSBJc0pTTWFwOgogICAgIGNh
c2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2UgSXNCb29sZWFuOgpA
QCAtMzU1LDYgKzM1OCwxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBHZXREeW5hbWljVmFyOgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAg
ICBjYXNlIFJlc29sdmVTY29wZToKKyAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICBjYXNlIEdldEpT
TWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9u
RW1wdHlKU01hcEJ1Y2tldDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRv
bVZhbHVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRW52aXJvbm1lbnRS
ZWNvcmQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpT
TWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAi
T2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKQEAgLTQ3
LDYgKzQ4LDggQEAKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXRj
aGRvZy5oIgogCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00NjE1LDYg
KzQ2MTgsMTM3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBJc0pTTWFwOiB7CisgICAgICAgIGNvbXBp
bGVJc0pTTWFwKG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIEpTTWFw
SGFzaDogeworICAgICAgICBjb21waWxlSlNNYXBIYXNoKG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBrZXkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJh
bmQgaGFzaCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBtYXNr
KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgaW5kZXgodGhpcyk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBidWZmZXIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBidWNrZXQodGhpcyk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGhh
c2hHUFIgPSBoYXNoLmdwcigpOworICAgICAgICBHUFJSZWcgbWFwR1BSID0gbWFwLmdwcigpOwor
ICAgICAgICBHUFJSZWcgbWFza0dQUiA9IG1hc2suZ3ByKCk7CisgICAgICAgIEdQUlJlZyBpbmRl
eEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgYnVmZmVyR1BSID0gYnVmZmVyLmdw
cigpOworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAgICBH
UFJSZWcga2V5R1BSID0ga2V5LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFw
T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KG5vZGUtPmNoaWxkMSgp
LCBtYXBHUFIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
U2V0T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KG5vZGUtPmNoaWxk
MSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhtYXBHUFIsIE9CSkVDVF9PRkZTRVRPRihKU01hcCwgbV9tYXApKSwgYnVm
ZmVyR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1
ZmZlckdQUiwgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsLCBtX2NhcGFjaXR5KSksIG1hc2tH
UFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZl
ckdQUiwgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsLCBtX2J1ZmZlcikpLCBidWZmZXJHUFIp
OworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIG1hc2tHUFIpOworICAgICAg
ICBtX2ppdC5tb3ZlKGhhc2hHUFIsIGluZGV4R1BSKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBkb25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGhD
YXNlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGxvb3BBcm91bmQ7CisKKyAg
ICAgICAgbV9qaXQuYW5kMzIobWFza0dQUiwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyR1BSLCBpbmRleEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGJ1
Y2tldEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBub3RQcmVzZW50SW5UYWJsZSA9IG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAgICAgYnVja2V0
R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsOjplbXB0eVZhbHVlKCkpKTsKKyAgICAgICAg
bG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwg
CisgICAgICAgICAgICBidWNrZXRHUFIsIFRydXN0ZWRJbW1QdHIoSGFzaE1hcEltcGw6OmRlbGV0
ZWRWYWx1ZSgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhidWNrZXRHUFIsIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBrZXkpKSwgYnVj
a2V0R1BSKTsKKworICAgICAgICAvLyBQZXJmb3JtIE9iamVjdC5pcygpCisgICAgICAgIGRvbmUu
YXBwZW5kKG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBr
ZXlHUFIpKTsgLy8gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0
aGUgYnVja2V0IHdlIHdlcmUgbG9va2luZyBmb3IhCisgICAgICAgIGF1dG8gb25lSXNudENlbGwg
PSBtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoYnVja2V0R1BSKSk7CisgICAgICAg
IC8vIGZpcnN0IGlzIGEgY2VsbCBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3Moa2V5R1BSKSkpOworICAgICAgICAvLyBCb3Ro
IGFyZSBjZWxscyBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2g4
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJ1Y2tldEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihT
dHJpbmdUeXBlKSkpOworICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KKyAg
ICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6RXF1
YWwsCisgICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhrZXlHUFIsIEpTQ2VsbDo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAg
Ly8gVGhlIGZpcnN0IGlzIGEgc3RyaW5nLCBidXQgdGhlIHNlY29uZCBpcyBub3QsIHdlIGNvbnRp
bnVlIHRvIGxvb3AgYXJvdW5kLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5qdW1w
KCkpOworCisgICAgICAgIG9uZUlzbnRDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgLy8gV2Un
dmUgYWxyZWFkeSBkb25lIGEgNjQtYml0IGNvbXBhcmUgYXQgdGhpcyBwb2ludCwgc28gaWYgb25l
IGlzIG5vdCBhIG51bWJlciwgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBlcXVhbC4KKyAgICAgICAg
bG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoYnVja2V0R1BSKSk7Cisg
ICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGtleUdQUikp
OworICAgICAgICAvLyBCb3RoIGFyZSBkZWZpbml0ZWx5IG51bWJlcnMuIElmIHdlIHNlZSBhIGRv
dWJsZSwgd2UgZ28gdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihidWNrZXRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihrZXlHUFIpKTsKKyAgICAgICAgCisg
ICAgICAgIGxvb3BBcm91bmQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5hZGQzMihUcnVz
dGVkSW1tMzIoMSksIGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29w
LCAmbV9qaXQpOworCisgICAgICAgIHNsb3dQYXRoQ2FzZXMubGluaygmbV9qaXQpOworICAgICAg
ICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIC8vIEZJWE1FOiB3
ZSd2ZSBhbHJlYWR5IGhhc2hlZCwgbGV0cyBqdXN0IHBhc3MgaW4gYWxsIHRoZSBzdGF0ZSB0byB0
aGUgZmluZEJ1Y2tldCBmdW5jdGlvbi4KKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25K
U01hcEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlHUFIpOworICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hl
Y2soKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RQ
cmVzZW50SW5UYWJsZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bVB0cihudWxscHRyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OiB7CisgICAgICAgIC8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyBlZGdlLgorICAgICAgICAvL1NwZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0
aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CisKKyAgICAgICAgLy9HUFJSZWcgbWFwR1BSID0gbWFwLmdwcigpOworICAgICAgICBHUFJSZWcg
YnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGF1dG8gbm90QnVja2V0ID0gbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYnVja2V0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDY0
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgT0JKRUNUX09GRlNFVE9GKEhhc2hN
YXBCdWNrZXQsIHZhbHVlKSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0
Lmp1bXAoKTsKKworICAgICAgICBub3RCdWNrZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAg
ICAgIG1faml0LmNvbXBhcmVQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRHUFIs
IFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCiAgICAgY2FzZSBJc09iamVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywg
UmV1c2UsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxMyw2
ICszNjEzLDk1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTQXJyYXkoTm8KICAg
ICBibGVzc2VkQm9vbGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlSXNKU01hcChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IElzSlNNYXApOworICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
Q2VsbFVzZSkgeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgR1BSUmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGlsZXI6
OkVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2Vs
bDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTTWFw
VHlwZSksCisgICAgICAgICAgICByZXN1bHRHUFIpOworICAgICAgICBibGVzc0Jvb2xlYW4ocmVz
dWx0R1BSKTsKKyAgICAgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRo
aXMpOworCisgICAgSlNWYWx1ZVJlZ3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsK
KyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncyk7CisKKyAg
ICBtX2ppdC5jb21wYXJlOChKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgIEpJVENvbXBpbGVy
OjpBZGRyZXNzKHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoSlNNYXBUeXBlKSwKKyAgICAgICAgcmVzdWx0
R1BSKTsKKyAgICBibGVzc0Jvb2xlYW4ocmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAg
ICBtb3ZlRmFsc2VUbyhyZXN1bHRHUFIpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAg
Ymxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUpTTWFwSGFzaChOb2RlKiBub2RlKQoreworICAgIC8vIEZJWE1FOiB3
ZSBhcmUgY3VycmVudGx5IHNsb3dlciBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHRvIGNhbGwg
aW50byBDIHRvIGhhc2ggdGhlIHN0cmluZy4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBhIHN0cmlu
ZyBhcmd1bWVudCBmYXN0IHBhdGggdGhhdCBhdm9pZHMgY2hlY2tzIQorCisgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgPT0gSlNNYXBIYXNoKTsKKworICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBHUFJSZWcgdGVt
cEdQUiA9IHRlbXAuZ3ByKCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc3RyYWln
aHRIYXNoOworICAgIGF1dG8gaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGlucHV0
R1BSKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc3RyYWln
aHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwg
cmVzdWx0R1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIHJl
c3VsdEdQUik7CisgICAgbV9qaXQudXJzaGlmdDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoNiksIHJlc3VsdEdQUik7CisgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3Qz
MihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgYXV0byBkb25lMiA9IG1f
aml0Lmp1bXAoKTsKKworICAgIGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgc3RyYWlnaHRI
YXNoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUikpOworICAgIHN0cmFp
Z2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhpbnB1dEdQUikp
KTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgIHN0cmFpZ2h0SGFz
aC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAg
ICBtX2ppdC5qc01hcEhhc2gocmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICBhdXRvIGRvbmUgPSBt
X2ppdC5qdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpT
TWFwSGFzaCwgcmVzdWx0R1BSLCBpbnB1dEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBkb25lMi5s
aW5rKCZtX2ppdCk7CisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgaW50MzJSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzUmVnRXhw
T2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtNzM4MSw2ICs3NDcwLDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OnNwZWN1bGF0ZVJlZ0V4cE9iamUKICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgb3Bl
cmFuZC5ncHIoKSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVj
dChFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKQoreworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2Us
IGNlbGwsIFNwZWNNYXBPYmplY3QsIEpTTWFwVHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVD
aGVjayhlZGdlLCBTcGVjTWFwT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVjdWxhdGVNYXBPYmpl
Y3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKQoreworICAgIHNwZWN1bGF0ZUNl
bGxUeXBlKGVkZ2UsIGNlbGwsIFNwZWNTZXRPYmplY3QsIEpTU2V0VHlwZSk7Cit9CisKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UpCit7CisgICAgaWYg
KCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU2V0T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVj
dWxhdGVTZXRPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCB8IFNwZWNPdGhlcikpCkBAIC03NjY4LDYgKzc3
ODUsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAgIGNh
c2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7
CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxh
dGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2V0T2JqZWN0VXNl
OgorICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihl
ZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDE0
ICs5MywxNCBAQCBwcml2YXRlOgogICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICBlbnVtIFNwaWxsT3JkZXIgewotICAgICAgICBTcGlsbE9yZGVy
Q29uc3RhbnQgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKLSAgICAgICAgU3BpbGxP
cmRlclNwaWxsZWQgID0gMiwgLy8gbm8gc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckpTICAgICAg
ID0gNCwgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckNlbGwgICAgID0gNCwgLy8g
bmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgID0gNCwgLy8gbmVlZHMgc3Bp
bGwKLSAgICAgICAgU3BpbGxPcmRlckludGVnZXIgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJv
eAotICAgICAgICBTcGlsbE9yZGVyQm9vbGVhbiAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94
Ci0gICAgICAgIFNwaWxsT3JkZXJEb3VibGUgICA9IDYsIC8vIG5lZWRzIHNwaWxsIGFuZCBjb252
ZXJ0CisgICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCAgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNo
ZWFwIGZpbGwKKyAgICAgICAgU3BpbGxPcmRlclNwaWxsZWQgICA9IDIsIC8vIG5vIHNwaWxsCisg
ICAgICAgIFNwaWxsT3JkZXJKUyAgICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBT
cGlsbE9yZGVyQ2VsbCAgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRl
clN0b3JhZ2UgICA9IDQsIC8vIG5lZWRzIHNwaWxsCisgICAgICAgIFNwaWxsT3JkZXJJbnRlZ2Vy
ICAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJCb29sZWFu
ICAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJEb3VibGUg
ICAgPSA2LCAvLyBuZWVkcyBzcGlsbCBhbmQgY29udmVydAogICAgIH07CiAjZWxpZiBVU0UoSlNW
QUxVRTMyXzY0KQogICAgIGVudW0gU3BpbGxPcmRlciB7CkBAIC01MTksNyArNTE5LDcgQEAgcHVi
bGljOgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzcGVjaWFsLCBzaW5jZSBpdCdzIG5vdCBhIEpT
IHZhbHVlIC0gYXMgaW4gaXQncyBub3QgdmlzaWJsZSB0byBKUwogICAgICAgICAgICAgLy8gY29k
ZS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBz
cGlsbE1lLCBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0
cmVhbSwgc3BpbGxNZSwgc3BpbGxGb3JtYXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKQEAgLTc1Niw2ICs3NTYsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlSW5zdGFu
Y2VPZkN1c3RvbShOb2RlKik7CiAKICAgICB2b2lkIGNvbXBpbGVJc0pTQXJyYXkoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZUlzSlNNYXAoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUpTTWFwSGFz
aChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNSZWdFeHBPYmplY3QoTm9kZSopOwogICAgIHZv
aWQgY29tcGlsZUlzVHlwZWRBcnJheVZpZXcoTm9kZSopOwogCkBAIC0xMTk3LDYgKzExOTksMTEg
QEAgcHVibGljOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSk7CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFy
ZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKKyAgICB9CiAKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
SklUT3BlcmF0aW9uX0VDSVpDIG9wZXJhdGlvbiwgR1BSUmVnIHJlZ09wMSwgVW5pcXVlZFN0cmlu
Z0ltcGwqIGlkZW50T3AyLCBpbnQzMl90IG9wMywgR1BSUmVnIHJlZ09wNCkKICAgICB7CkBAIC0x
NjcxLDYgKzE2NzgsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVy
YXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9K
SVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAg
ICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAg
IH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25f
RUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcy
LCB1bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFyZzMpKTsK
QEAgLTI2NTYsNiArMjY2OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9i
amVjdChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChFZGdlLCBHUFJSZWcg
Y2VsbCk7CiAgICAgdm9pZCBzcGVjdWxhdGVSZWdFeHBPYmplY3QoRWRnZSk7CisgICAgdm9pZCBz
cGVjdWxhdGVNYXBPYmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRn
ZSwgR1BSUmVnIGNlbGwpOworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UpOworICAg
IHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNw
ZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRn
ZSBlZGdlLCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudEFuZExv
YWRTdG9yYWdlKEVkZ2UgZWRnZSwgR1BSUmVnIHN0cmluZywgR1BSUmVnIHN0b3JhZ2UpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05NCw2ICs5NCwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgVXNlCiAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CiAgICAgICAgIG91dC5wcmludCgi
UmVnRXhwT2JqZWN0Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToK
KyAgICAgICAgb3V0LnByaW50KCJNYXBPYmplY3RVc2UiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIlNldE9iamVjdFVzZSIpOwor
ICAgICAgICByZXR1cm47CiAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICBvdXQu
cHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2
Myw4IEBAIGVudW0gVXNlS2luZCB7CiAgICAgS25vd25TdHJpbmdVc2UsCiAgICAgS25vd25Qcmlt
aXRpdmVVc2UsIC8vIFRoaXMgYml6YXJyZSB0eXBlIGFyaXNlcyBmb3Igb3Bfc3RyY2F0LCB3aGlj
aCBoYXMgYSBieXRlY29kZSBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIG9ubHkgc2VlIHByaW1pdGl2
ZXMgKGkuZS4gbm90IG9iamVjdHMpLgogICAgIFN5bWJvbFVzZSwKKyAgICBNYXBPYmplY3RVc2Us
CisgICAgU2V0T2JqZWN0VXNlLAogICAgIFN0cmluZ09iamVjdFVzZSwKICAgICBTdHJpbmdPclN0
cmluZ09iamVjdFVzZSwKICAgICBOb3RTdHJpbmdWYXJVc2UsCkBAIC0xMzQsNiArMTM2LDEwIEBA
IGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICAgICAgcmV0dXJu
IFNwZWNIZWFwVG9wICYgflNwZWNPYmplY3Q7CiAgICAgY2FzZSBTeW1ib2xVc2U6CiAgICAgICAg
IHJldHVybiBTcGVjU3ltYm9sOworICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICByZXR1
cm4gU3BlY01hcE9iamVjdDsKKyAgICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAgICAgcmV0dXJu
IFNwZWNTZXRPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgIHJldHVy
biBTcGVjU3RyaW5nT2JqZWN0OwogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CkBA
IC0yMjEsNiArMjI3LDggQEAgaW5saW5lIGJvb2wgaXNDZWxsKFVzZUtpbmQga2luZCkKICAgICBj
YXNlIFN5bWJvbFVzZToKICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAgICBjYXNlIFN0cmlu
Z09yU3RyaW5nT2JqZWN0VXNlOgorICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAgIGNhc2UgU2V0
T2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNs
dWRlICJGVExBYnN0cmFjdEhlYXAuaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNs
dWRlICJKU01hcC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTEw
Miw3ICsxMDMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3Jv
KFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKICAg
ICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9m
ZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3Byb3RvdHlwZSwgU3RydWN0dXJlOjpwcm90
b3R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0
dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQorICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJ
RCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNNYXBfSGFz
aE1hcEltcGwsIE9CSkVDVF9PRkZTRVRPRihKU01hcCwgbV9tYXApKSBcCisgICAgbWFjcm8oSGFz
aE1hcEltcGxfY2FwYWNpdHksIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbCwgbV9jYXBhY2l0
eSkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9idWZmZXIsICBPQkpFQ1RfT0ZGU0VUT0YoSGFz
aE1hcEltcGwsIG1fYnVmZmVyKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNrZXRfdmFsdWUsIE9C
SkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCB2YWx1ZSkpIFwKKyAgICBtYWNybyhIYXNoTWFw
QnVja2V0X2tleSwgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBCdWNrZXQsIGtleSkpCiAKICNkZWZp
bmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAgbWFjcm8oRGly
ZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBz
aXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
MCw2ICsxODAsMTEgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAog
ICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAg
IGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01hcDoKKyAgICBjYXNlIEpTTWFwSGFzaDoK
KyAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoK
KyAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAg
Y2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNTEzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1l
bnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgog
I2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1Rh
YmxlLmgiCkBAIC04OTgsNiArODk5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNKU0Fy
cmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAgICAgICAgIGNvbXBpbGVJc0pTTWFwKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6CisgICAgICAgICAgICBj
b21waWxlSlNNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRK
U01hcEJ1Y2tldDoKKyAgICAgICAgICAgIGNvbXBpbGVHZXRKU01hcEJ1Y2tldCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAg
ICAgIGNvbXBpbGVMb2FkRnJvbUpTTWFwQnVja2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlSXNO
b25FbXB0eUpTTWFwQnVja2V0KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJ
c09iamVjdDoKICAgICAgICAgICAgIGNvbXBpbGVJc09iamVjdCgpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC02MzU1LDYgKzYzNzEsMjQ5IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEJvb2xlYW4o
bV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVzdWx0KSk7CiAgICAgfQogCisg
ICAgdm9pZCBjb21waWxlSlNNYXBIYXNoKCkKKyAgICB7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXND
ZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdENlbGwg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93Q2FzZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHN0cmFpZ2h0SGFzaCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzTnVtYmVyQ2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGlzU3RyaW5nQ2FzZSA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vbkVtcHR5U3RyaW5nQ2FzZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2Nr
KCk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNDZWxsKHZhbHVlLCBw
cm92ZW5UeXBlKG1fbm9kZS0+Y2hpbGQxKCkpKSwgdW5zdXJlKGlzQ2VsbENhc2UpLCB1bnN1cmUo
bm90Q2VsbCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oaXNDZWxsQ2FzZSwgaXNTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZhbHVlIGlzU3RyaW5nID0g
bV9vdXQuZXF1YWwobV9vdXQubG9hZDhaZXJvRXh0MzIodmFsdWUsIG1faGVhcHMuSlNDZWxsX3R5
cGVJbmZvVHlwZSksIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nVHlwZSkpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc1N0cmluZywgdW5zdXJlKGlzU3RyaW5nQ2FzZSksIHVu
c3VyZShzdHJhaWdodEhhc2gpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpc1N0cmluZ0Nh
c2UsIG5vbkVtcHR5U3RyaW5nQ2FzZSk7CisgICAgICAgIExWYWx1ZSBzdHJpbmdJbXBsID0gbV9v
dXQubG9hZFB0cih2YWx1ZSwgbV9oZWFwcy5KU1N0cmluZ192YWx1ZSk7CisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cmluZ0ltcGwsIG1fb3V0LmNvbnN0
SW50UHRyKDApKSwgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShub25FbXB0eVN0cmluZ0Nhc2Up
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub25FbXB0eVN0cmluZ0Nhc2UsIG5vdENlbGwp
OworICAgICAgICBMVmFsdWUgaGFzaCA9IG1fb3V0LmxTaHIobV9vdXQubG9hZDMyKHN0cmluZ0lt
cGwsIG1faGVhcHMuU3RyaW5nSW1wbF9oYXNoQW5kRmxhZ3MpLCBtX291dC5jb25zdEludDMyKDYp
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0ID0gbV9v
dXQuYW5jaG9yKGhhc2gpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoaGFzaCwg
bV9vdXQuY29uc3RJbnQzMigwKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3Vh
bGx5KGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGwsIGlz
TnVtYmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzTnVtYmVy
KHZhbHVlKSwgdW5zdXJlKGlzTnVtYmVyQ2FzZSksIHVuc3VyZShzdHJhaWdodEhhc2gpKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhpc051bWJlckNhc2UsIHN0cmFpZ2h0SGFzaCk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzSW50MzIodmFsdWUpLCB1bnN1cmUoc3Ry
YWlnaHRIYXNoKSwgdW5zdXJlKHNsb3dDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
c3RyYWlnaHRIYXNoLCBzbG93Q2FzZSk7CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7
CisgICAgICAgIExWYWx1ZSBrZXkgPSB2YWx1ZTsKKyAgICAgICAgTFZhbHVlIHRlbXAgPSBrZXk7
CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigzMikpOwor
ICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5h
ZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4gMjIpOworICAgICAgICB0
ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdElu
dDMyKDIyKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAg
ICAvLyBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0
ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTMpKTsKKyAgICAgICAgdGVt
cCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVt
cCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgICAgICB0ZW1wID0ga2V5Owor
ICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDgpKTsKKyAg
ICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSAo
a2V5IDw8IDMpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hs
KHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMykpOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5
LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4gMTUpOworICAgICAgICB0ZW1wID0g
a2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDE1
KSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBr
ZXkgKz0gfihrZXkgPDwgMjcpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0g
bV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjcpKTsKKyAgICAgICAgdGVtcCA9IG1f
b3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7Cisg
ICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAg
ICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigzMSkpOworICAgICAg
ICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuY2Fz
dFRvSW50MzIoa2V5KTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKGtleSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIHZtQ2Fs
bChJbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwSGFzaCksIG1fY2FsbEZyYW1l
LCB2YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMy
KG1fb3V0LnBoaShJbnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdI
YXNoUmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0SlNNYXBCdWNrZXQoKQor
ICAgIHsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcEFyb3VuZCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgbm90UHJlc2VudEluVGFibGUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBub3RFbXB0eVZhbHVlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgbm90RGVsZXRlZFZhbHVlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgbm90Qml0RXF1YWwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBidWNrZXRLZXlOb3RDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgYnVja2V0S2V5SXNDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgYm90aEFyZUNlbGxzID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgYnVja2V0S2V5SXNTdHJpbmcgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBidWNrZXRLZXlJc051bWJlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGJvdGhBcmVOdW1iZXJzID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgYnVja2V0S2V5SXNJbnQzMiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgTFZhbHVl
IG1hcCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBrZXkgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBMVmFsdWUgaGFzaCA9IGxvd0lu
dDMyKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAgIExWYWx1ZSBoYXNoTWFwSW1wbCA9IG1f
b3V0LmxvYWRQdHIobWFwLCBtX2hlYXBzLkpTTWFwX0hhc2hNYXBJbXBsKTsKKyAgICAgICAgTFZh
bHVlIGJ1ZmZlciA9IG1fb3V0LmxvYWRQdHIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcElt
cGxfYnVmZmVyKTsKKyAgICAgICAgTFZhbHVlIG1hc2sgPSBtX291dC5zdWIobV9vdXQubG9hZDMy
KGhhc2hNYXBJbXBsLCBtX2hlYXBzLkhhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJP
bmUpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5hbmNob3Io
aGFzaCk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7
CisgICAgICAgIExWYWx1ZSB1bm1hc2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0
YXJ0KTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2Vk
SW5kZXgpOworICAgICAgICBMVmFsdWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291
dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9v
dXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIGJ1Y2tldFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50
UHRyKEhhc2hNYXBJbXBsOjplbXB0eVZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShub3RQ
cmVzZW50SW5UYWJsZSksIHVuc3VyZShub3RFbXB0eVZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8obm90RW1wdHlWYWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hN
YXBJbXBsOjpkZWxldGVkVmFsdWUoKSkpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQp
LCB1bnN1cmUobm90RGVsZXRlZFZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
RGVsZXRlZFZhbHVlLCBub3RCaXRFcXVhbCk7CisgICAgICAgIExWYWx1ZSBidWNrZXRLZXkgPSBt
X291dC5sb2FkNjQoaGFzaE1hcEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0X2tleSk7Cisg
ICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKGtleSwgYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24p
LCB1bnN1cmUobm90Qml0RXF1YWwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RCaXRF
cXVhbCwgYnVja2V0S2V5SXNDZWxsKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChidWNr
ZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzQ2VsbCksIHVuc3VyZShidWNr
ZXRLZXlOb3RDZWxsKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNDZWxs
LCBib3RoQXJlQ2VsbHMpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGtleSksCisgICAg
ICAgICAgICB1bnN1cmUoYm90aEFyZUNlbGxzKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhib3RoQXJlQ2VsbHMsIGJ1Y2tldEtleUlzU3RyaW5nKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGJ1Y2tldEtleSksCisgICAgICAgICAgICB1bnN1
cmUoYnVja2V0S2V5SXNTdHJpbmcpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzU3RyaW5nLCBidWNrZXRLZXlOb3RDZWxsKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzU3RyaW5nKGtleSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1Bh
dGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tl
dEtleU5vdENlbGwsIGJ1Y2tldEtleUlzTnVtYmVyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Tm90TnVtYmVyKGJ1Y2tldEtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVu
c3VyZShidWNrZXRLZXlJc051bWJlcikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tl
dEtleUlzTnVtYmVyLCBib3RoQXJlTnVtYmVycyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05v
dE51bWJlcihrZXkpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUoYm90
aEFyZU51bWJlcnMpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhib3RoQXJlTnVtYmVycywg
YnVja2V0S2V5SXNJbnQzMik7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGJ1Y2tl
dEtleSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUoYnVja2V0S2V5SXNJ
bnQzMikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzSW50MzIsIGxvb3BB
cm91bmQpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihrZXkpLAorICAgICAgICAg
ICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291
dC5hcHBlbmRUbyhsb29wQXJvdW5kLCBzbG93UGF0aCk7CisgICAgICAgIG1fb3V0LmFkZEluY29t
aW5nVG9QaGkodW5tYXNrZWRJbmRleCwgbV9vdXQuYW5jaG9yKG1fb3V0LmFkZChpbmRleCwgbV9v
dXQuaW50MzJPbmUpKSk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAg
ICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgbm90UHJlc2VudEluVGFibGUpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UGF0aFJlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwocG9pbnRl
clR5cGUoKSwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCksIG1fY2Fs
bEZyYW1lLCBtYXAsIGtleSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90UHJlc2VudEluVGFibGUsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFByZXNlbnRSZXN1bHQgPSBtX291dC5hbmNob3Io
bV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHNldE1hcEJ1Y2tldChtX291dC5waGkocG9pbnRlclR5cGUoKSwgYnVja2V0UmVzdWx0LCBz
bG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29t
cGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIG1hcEJ1Y2tl
dCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNoaWxkMigpKTsKKworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBo
YXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
QnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFs
KG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNv
bnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNrZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0J1Y2tldCwgY29udGludWF0aW9uKTsKKyAgICAg
ICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2
NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF92YWx1ZSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBub0J1
Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNO
b25FbXB0eUpTTWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBidWNrZXQgPSBsb3dN
YXBCdWNrZXQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5ub3RFcXVhbChidWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAgICAgICAgc2V0Qm9v
bGVhbihyZXN1bHQpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUlzSlNNYXAoKQorICAgIHsK
KyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAg
ICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKAorICAgICAgICAgICAgICAgIG1fb3V0Lmxv
YWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLAorICAgICAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNNYXBUeXBlKSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pT
VmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2Fz
ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90Q2VsbFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFsc2UpOworICAgICAgICBtX291dC5icmFu
Y2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEo
KSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShjb250aW51YXRpb24pKTsKKworICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGNvbnRp
bnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNlbGxSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQuZXF1YWwoCisgICAgICAgICAgICBtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwg
bV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50
MzIoSlNNYXBUeXBlKSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNl
dEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBjZWxsUmVzdWx0KSk7Cisg
ICAgfQorCiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RPck51bGwoKQogICAgIHsKICAgICAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTEwMDU5LDYgKzEwMzE4LDE3IEBAIHByaXZhdGU6
CiAgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQorCisgICAgTFZhbHVlIGxvd01hcEJ1Y2tldChFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9tYXBCdWNrZXRWYWx1ZXMu
Z2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbG93Q2VsbChlZGdlKTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIHN0cmlj
dEludDUyVG9JbnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0xMTQ1OCw2
ICsxMTcyOCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNl
dChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwogICAgIH0KKyAg
ICB2b2lkIHNldE1hcEJ1Y2tldChOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBtX21hcEJ1Y2tldFZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwg
bV9oaWdoQmxvY2spKTsKKyAgICB9CiAgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZh
bHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2Vy
ZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CkBAIC0xMTQ5MSw2ICsxMTc2NSwxMCBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKICAg
ICB9CisgICAgdm9pZCBzZXRNYXBCdWNrZXQoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
c2V0TWFwQnVja2V0KG1fbm9kZSwgdmFsdWUpOworICAgIH0KICAgICB2b2lkIHNldERvdWJsZShM
VmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CkBA
IC0xMTY3NCw2ICsxMTk1Miw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWRO
b2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9tYXBCdWNrZXRWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9kb3VibGVWYWx1ZXM7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhh
Y2suIEl0IHByZXZlbnRzIEIzIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFy
Z3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1MCBAQCB2
b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0pOwogfQog
Cit2b2lkIEFzc2VtYmx5SGVscGVyczo6anNNYXBIYXNoKEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwg
R1BSUmVnIHNjcmF0Y2gpCit7CisgICAgR1BSUmVnIGlucHV0ID0gaW5wdXRBbmRSZXN1bHQ7Cisg
ICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAg
ICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMzIpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNo
KTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gMjIp
OworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MjIpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5ICs9
IH4oa2V5IDw8IDEzKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChU
cnVzdGVkSW1tMzIoMTMpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsKKyAgICBhZGQ2
NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgbW92ZShp
bnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMig4KSwgc2NyYXRjaCk7
CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSAoa2V5IDw8IDMpOwor
ICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwg
c2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5
ID4+IDE1KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDE1KSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8v
IGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDI3KSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7Cisg
ICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDMxKTsKKyAg
ICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMxKSwg
c2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworCisgICAgLy8gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHJlc3VsdCkKKyAgICB2b2lkKiBtYXNrID0gYml0d2lzZV9jYXN0PHZvaWQq
PihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KFVJTlRfTUFYKSk7CisgICAgYW5kNjQoVHJ1c3RlZElt
bVB0cihtYXNrKSwgaW5wdXRBbmRSZXN1bHQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDgg
QEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKG1fYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5
cGUoKSA9PSBKSVRDb2RlOjpOb25lIHx8IEpJVENvZGU6OmlzQmFzZWxpbmVDb2RlKG1fYmFzZWxp
bmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgICAgICB9CiAgICAgfQorCisgICAgdm9pZCBq
c01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFZN
KiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX09QKG9wX2lzX251bWJlcikKICAgICAgICAgREVG
SU5FX09QKG9wX2lzX3N0cmluZykKICAgICAgICAgREVGSU5FX09QKG9wX2lzX2pzYXJyYXkpCisg
ICAgICAgIERFRklORV9PUChvcF9pc19qc21hcCkKICAgICAgICAgREVGSU5FX09QKG9wX2lzX29i
amVjdCkKICAgICAgICAgREVGSU5FX09QKG9wX2plcV9udWxsKQogICAgICAgICBERUZJTkVfT1Ao
b3BfamZhbHNlKQpAQCAtMzUxLDYgKzM1Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgICAgIAogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19j
aGlja2VuX3Byb2xvZ3VlKQogICAgICAgICBERUZJTkVfT1Aob3BfbG9nX3NoYWRvd19jaGlja2Vu
X3RhaWwpCisgICAgICAgIERFRklORV9PUChvcF9qc21hcF9oYXNoKQogICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MjMsNiArNTIzLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9pc19udW1iZXIoSW5zdHJ1
Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2lzX3N0cmluZyhJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfaXNfanNhcnJheShJbnN0cnVjdGlvbiopOworICAgICAgICB2
b2lkIGVtaXRfb3BfaXNfanNtYXAoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2lzX29iamVjdChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfamVxX251bGwo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2pmYWxzZShJbnN0cnVjdGlvbiop
OwpAQCAtNjA1LDYgKzYwNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfdG9faW5kZXhfc3RyaW5nKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9s
b2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKEluc3RydWN0aW9uKik7CisgICAgICAgIHZv
aWQgZW1pdF9vcF9qc21hcF9oYXNoKEluc3RydWN0aW9uKik7CiAKICAgICAgICAgdm9pZCBlbWl0
U2xvd19vcF9hZGQoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CiAgICAgICAgIHZvaWQgZW1pdFNsb3dfb3BfYml0YW5kKEluc3RydWN0aW9uKiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDYx
IEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2pzYXJyYXkoSW5zdHJ1Y3Rpb24KICAgICBlbWl0UHV0
VmlydHVhbFJlZ2lzdGVyKGRzdCk7CiB9CiAKK3ZvaWQgSklUOjplbWl0X29wX2lzX2pzbWFwKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QwKTsKKyAgICBKdW1wIGlzTm90Q2VsbCA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwor
CisgICAgY29tcGFyZTgoRXF1YWwsIEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoSlNNYXBUeXBlKSwgcmVnVDApOworICAgIGVtaXRUYWdC
b29sKHJlZ1QwKTsKKyAgICBKdW1wIGRvbmUgPSBqdW1wKCk7CisKKyAgICBpc05vdENlbGwubGlu
ayh0aGlzKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVnVDApOworCisg
ICAgZG9uZS5saW5rKHRoaXMpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKK30K
Kwordm9pZCBKSVQ6OmVtaXRfb3BfanNtYXBfaGFzaChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQoreworICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisKKyAg
ICBKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1
ZSwgcmVnVDApOworICAgIEp1bXAgaXNOb3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdU
MCk7CisgICAgSnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChicmFu
Y2g4KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qw
LCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVnVDApOworICAgIHNsb3dQYXRoLmFwcGVu
ZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKSk7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAs
IFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLCByZWdUMCk7CisgICAgdXJzaGlmdDMyKFRydXN0
ZWRJbW0zMig2KSwgcmVnVDApOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0MzIoWmVy
bywgcmVnVDApKTsKKyAgICBhdXRvIGp1bXBUb0JveGluZyA9IGp1bXAoKTsKKworICAgIGlzTm90
Q2VsbC5saW5rKHRoaXMpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQoYnJhbmNoSWZOb3ROdW1i
ZXIocmVnVDApKTsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKGJyYW5jaElmSW50MzIoSlNWYWx1
ZVJlZ3MocmVnVDApKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisKKyAgICBzdHJh
aWdodEhhc2gubGluayh0aGlzKTsKKworICAgIGpzTWFwSGFzaChyZWdUMCwgcmVnVDEpOworICAg
IGp1bXBUb0JveGluZy5saW5rKHRoaXMpOworICAgIGJveEludDMyKHJlZ1QwLCBKU1ZhbHVlUmVn
cyhyZWdUMCkpOworICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0KTsKKyAgICBKdW1wIGRv
bmUgPSBqdW1wKCk7CisKKyAgICBzbG93UGF0aC5saW5rKHRoaXMpOworICAgIEpJVFNsb3dQYXRo
Q2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfanNt
YXBfaGFzaCk7CisgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKKyAgICBkb25lLmxpbmsodGhpcyk7
Cit9CisKIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNiArMTk0LDcgQEAgdHlwZWRlZiBKU0NlbGwqIChK
SVRfT1BFUkFUSU9OICpDX0pJVE9wZQogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FU3RaWikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCwgaW50
MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAq
Q19KSVRPcGVyYXRpb25fRUpzY0kpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBVbmlxdWVkU3RyaW5n
SW1wbCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9F
Q0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgZG91Ymxl
IChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9EKShkb3VibGUpOwogdHlwZWRlZiBkb3Vi
bGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0cpKEpTR2xvYmFsT2JqZWN0Kik7CiB0
eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fREQpKGRvdWJsZSwg
ZG91YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3Bw
CShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYwLDYgKzE2MCw3IEBAIHZvaWQgRGF0YTo6cGVy
Zm9ybUFzc2VydGlvbnMoVk0mIHZtKQogICAgIFNUQVRJQ19BU1NFUlQoRmluYWxPYmplY3RUeXBl
ID09IDIxKTsKICAgICBTVEFUSUNfQVNTRVJUKEpTRnVuY3Rpb25UeXBlID09IDIzKTsKICAgICBT
VEFUSUNfQVNTRVJUKEFycmF5VHlwZSA9PSAyOSk7CisgICAgU1RBVElDX0FTU0VSVChKU01hcFR5
cGUgPT0gMTE3KTsKICAgICBTVEFUSUNfQVNTRVJUKEludDhBcnJheVR5cGUgPT0gMTAwKTsKICAg
ICBTVEFUSUNfQVNTRVJUKEludDE2QXJyYXlUeXBlID09IDEwMSk7CiAgICAgU1RBVElDX0FTU0VS
VChJbnQzMkFycmF5VHlwZSA9PSAxMDIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDkxLDcgKzE0OTEsNiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZGVidWcp
CiAgICAgTExJTlRfQkVHSU4oKTsKICAgICBpbnQgZGVidWdIb29rSUQgPSBwY1sxXS51Lm9wZXJh
bmQ7CiAgICAgdm0uaW50ZXJwcmV0ZXItPmRlYnVnKGV4ZWMsIHN0YXRpY19jYXN0PERlYnVnSG9v
a0lEPihkZWJ1Z0hvb2tJRCkpOwotICAgIAogICAgIExMSU5UX0VORCgpOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbQkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTExOTksMjAgKzEx
OTksMTA4IEBAIF9sbGludF9vcF9pc19zdHJpbmc6CiAgICAgc3RvcmVxIFZhbHVlRmFsc2UsIFtj
ZnIsIHQyLCA4XQogICAgIGRpc3BhdGNoKDMpCiAKLQotX2xsaW50X29wX2lzX2pzYXJyYXk6Ci0g
ICAgdHJhY2VFeGVjdXRpb24oKQorbWFjcm8gZW1pdElzQ2VydGFpbkpTVHlwZSh0eXBlKQogICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
MSwgdDIpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDApCi0gICAgYnRxbnogdDAs
IHRhZ01hc2ssIC5vcElzSlNBcnJheU5vdENlbGwKLSAgICBjYmVxIEpTQ2VsbDo6bV90eXBlW3Qw
XSwgQXJyYXlUeXBlLCB0MQorICAgIGJ0cW56IHQwLCB0YWdNYXNrLCAuanNUeXBlTm90Q2VsbAor
ICAgIGNiZXEgSlNDZWxsOjptX3R5cGVbdDBdLCB0eXBlLCB0MQogICAgIG9ycSBWYWx1ZUZhbHNl
LCB0MQogICAgIHN0b3JlcSB0MSwgW2NmciwgdDIsIDhdCiAgICAgZGlzcGF0Y2goMykKLS5vcElz
SlNBcnJheU5vdENlbGw6CisuanNUeXBlTm90Q2VsbDoKICAgICBzdG9yZXEgVmFsdWVGYWxzZSwg
W2NmciwgdDIsIDhdCiAgICAgZGlzcGF0Y2goMykKK2VuZAorCitfbGxpbnRfb3BfaXNfanNhcnJh
eToKKyAgICB0cmFjZUV4ZWN1dGlvbigpCisgICAgZW1pdElzQ2VydGFpbkpTVHlwZShBcnJheVR5
cGUpCisKKworX2xsaW50X29wX2lzX2pzbWFwOgorICAgIHRyYWNlRXhlY3V0aW9uKCkKKyAgICBl
bWl0SXNDZXJ0YWluSlNUeXBlKEpTTWFwVHlwZSkKKworX2xsaW50X29wX2pzbWFwX2hhc2g6Cisg
ICAgdHJhY2VFeGVjdXRpb24oKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKKyAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MCkKKyAgICBidHFueiB0MCwgdGFnTWFzaywg
LmpzTWFwSGFzaE5vdENlbGwKKyAgICBiYm5lcSBKU0NlbGw6Om1fdHlwZVt0MF0sIFN0cmluZ1R5
cGUsIC5zdHJhaWdodEhhc2gKKyAgICBsb2FkcCBKU1N0cmluZzo6bV92YWx1ZVt0MF0sIHQwCisg
ICAgYnRweiB0MCwgLnNsb3dQYXRoCisgICAgbG9hZGkgU3RyaW5nSW1wbDo6bV9oYXNoQW5kRmxh
Z3NbdDBdLCB0MAorICAgIHVyc2hpZnRpIDYsIHQwICMgRklYTUUgc3RhdGljIGFzc2VydCA2IGZv
ciBzX2ZsYWdDb3VudCBvZiBTdHJpbmdJbXBsIQorICAgIGJ0aXogdDAsIC5zbG93UGF0aAorICAg
IGptcCAuYm94VXBSZXN1bHQKKyAgICAgCisuc2xvd1BhdGg6CisgICAgY2FsbE9wY29kZVNsb3dQ
YXRoKF9zbG93X3BhdGhfanNtYXBfaGFzaCkKKyAgICBkaXNwYXRjaCgzKQorLmpzTWFwSGFzaE5v
dENlbGw6CisgICAgYnFiIHQwLCB0YWdUeXBlTnVtYmVyLCAub3AxTm90SW50CisgICAgam1wIC5z
dHJhaWdodEhhc2gKKy5vcDFOb3RJbnQ6CisgICAgYnRxeiB0MCwgdGFnVHlwZU51bWJlciwgLnN0
cmFpZ2h0SGFzaAorICAgICMgRklYTUUgbWFrZSBkb3VibGUgY2FzZSBmYXN0CisgICAgY2FsbE9w
Y29kZVNsb3dQYXRoKF9zbG93X3BhdGhfanNtYXBfaGFzaCkKKyAgICBkaXNwYXRjaCgzKQorLnN0
cmFpZ2h0SGFzaDoKKyAgICBtb3ZlIHQwLCB0MQorIyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAg
IGxzaGlmdHAgMzIsIHQxCisgICAgbm90cSB0MQorICAgIGFkZHEgdDEsIHQwCisjIGtleSBePSAo
a2V5ID4+IDIyKTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDIyLCB0MQorICAgIHhv
cnEgdDEsIHQwCisjIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZSB0MCwgdDEKKyAgICBs
c2hpZnRwIDEzLCB0MQorICAgIG5vdHEgdDEKKyAgICBhZGRxIHQxLCB0MAorIyBrZXkgXj0gKGtl
eSA+PiA4KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIHVyc2hpZnRwIDgsIHQxCisgICAgeG9ycSB0
MSwgdDAKKyMga2V5ICs9IChrZXkgPDwgMyk7CisgICAgbW92ZSB0MCwgdDEKKyAgICBsc2hpZnRw
IDMsIHQxCisgICAgYWRkcSB0MSwgdDAKKyMga2V5IF49IChrZXkgPj4gMTUpOworICAgIG1vdmUg
dDAsIHQxCisgICAgdXJzaGlmdHAgMTUsIHQxCisgICAgeG9ycSB0MSwgdDAKKyMga2V5ICs9IH4o
a2V5IDw8IDI3KTsKKyAgICBtb3ZlIHQwLCB0MQorICAgIGxzaGlmdHAgMjcsIHQxCisgICAgbm90
cSB0MQorICAgIGFkZHEgdDEsIHQwCisjIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICBtb3ZlIHQw
LCB0MQorICAgIHVyc2hpZnRwIDMxLCB0MQorICAgIHhvcnEgdDEsIHQwCisuYm94VXBSZXN1bHQ6
CisgICAgYW5kcSA0Mjk0OTY3Mjk1LCB0MCAjIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQp
CisgICAgb3JxIHRhZ1R5cGVOdW1iZXIsIHQwCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEs
IHQyKQorICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCisgICAgZGlzcGF0Y2goMykKKworCisj
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MSkKKyMgICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDEsIHQyKQorIyAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MCkKKyMgICAgYnRx
bnogdDAsIHRhZ01hc2ssIC5vcElzSlNBcnJheU5vdENlbGwKKyMgICAgY2JlcSBKU0NlbGw6Om1f
dHlwZVt0MF0sIEFycmF5VHlwZSwgdDEKKyMgICAgb3JxIFZhbHVlRmFsc2UsIHQxCisjICAgIHN0
b3JlcSB0MSwgW2NmciwgdDIsIDhdCisjICAgIGRpc3BhdGNoKDMpCisjLm9wSXNKU0FycmF5Tm90
Q2VsbDoKKyMgICAgc3RvcmVxIFZhbHVlRmFsc2UsIFtjZnIsIHQyLCA4XQorIyAgICBkaXNwYXRj
aCgzKQogCiAKIF9sbGludF9vcF9pc19vYmplY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw2ICszNDcsNyBAQCBjb25zdCBPYmplY3RUeXBlID0g
MjAKIGNvbnN0IEZpbmFsT2JqZWN0VHlwZSA9IDIxCiBjb25zdCBKU0Z1bmN0aW9uVHlwZSA9IDIz
CiBjb25zdCBBcnJheVR5cGUgPSAyOQorY29uc3QgSlNNYXBUeXBlID0gMTE3CiAKICMgVGhlIHR5
cGVkIGFycmF5IHR5cGVzIG5lZWQgdG8gYmUgbnVtYmVyZWQgaW4gYSBwYXJ0aWN1bGFyIG9yZGVy
IGJlY2F1c2Ugb2YgdGhlIG1hbnVhbGx5IHdyaXR0ZW4KICMgc3dpdGNoIHN0YXRlbWVudCBpbiBn
ZXRfYnlfdmFsIGFuZCBwdXRfYnlfdmFsLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL29m
ZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL2luc3RydWN0aW9ucy5yYgkocmV2aXNpb24gMjA1MTM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL29mZmxpbmVhc20vaW5zdHJ1Y3Rpb25zLnJiCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw2ICs0MSw3IEBAIE1BQ1JPX0lOU1RSVUNUSU9OUyA9CiAgICAgICJuZWdwIiwK
ICAgICAgIm5lZ3EiLAogICAgICAibm90aSIsCisgICAgICJub3RxIiwKICAgICAgIm9yaSIsCiAg
ICAgICJyc2hpZnRpIiwKICAgICAgInVyc2hpZnRpIiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvb2ZmbGluZWFzbS94ODYucmIJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9vZmZsaW5lYXNtL3g4Ni5yYgkod29ya2luZyBjb3B5KQpAQCAtOTAxLDYgKzkwMSw4
IEBAIGNsYXNzIEluc3RydWN0aW9uCiAgICAgICAgICAgICAkYXNtLnB1dHMgIm5lZyN7eDg2U3Vm
Zml4KDpxdWFkKX0gI3t4ODZPcGVyYW5kcyg6cXVhZCl9IgogICAgICAgICB3aGVuICJub3RpIgog
ICAgICAgICAgICAgJGFzbS5wdXRzICJub3Qje3g4NlN1ZmZpeCg6aW50KX0gI3t4ODZPcGVyYW5k
cyg6aW50KX0iCisgICAgICAgIHdoZW4gIm5vdHEiCisgICAgICAgICAgICAkYXNtLnB1dHMgIm5v
dCN7eDg2U3VmZml4KDpxdWFkKX0gI3t4ODZPcGVyYW5kcyg6cXVhZCl9IgogICAgICAgICB3aGVu
ICJvcmkiCiAgICAgICAgICAgICBoYW5kbGVYODZPcCgib3Ije3g4NlN1ZmZpeCg6aW50KX0iLCA6
aW50KQogICAgICAgICB3aGVuICJvcnAiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVk
ZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNTdHJpbmcuaCIKICNpbmNsdWRlICJKU1dpdGhTY29wZS5o
IgpAQCAtOTAwLDQgKzkwMSwxMSBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X2J5X3Zh
bF93aXRoCiAgICAgRU5EKCk7CiB9CiAKK1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9qc21hcF9o
YXNoKQoreworICAgIEJFR0lOKCk7CisgICAgSlNWYWx1ZSB2YWx1ZVRvSGFzaCA9IE9QX0MoMiku
anNWYWx1ZSgpOworICAgIFJFVFVSTihKU1ZhbHVlKGpzTWFwSGFzaChleGVjLCB2YWx1ZVRvSGFz
aCkpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMjA1MTM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI1Niw2ICsyNTYsNyBAQCBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2dldF9ieV9pCiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2dldF9ieV92YWxfd2l0
aF90aGlzKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfcHV0X2J5X2lkX3dpdGhf
dGhpcyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3B1dF9ieV92YWxfd2l0aF90
aGlzKTsKK1NMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfanNtYXBfaGFzaCk7CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRyaW5zaWMuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkgQEAgZW51bSBK
U19FWFBPUlRfUFJJVkFURSBJbnRyaW5zaWMgewogICAgIElzUmVnRXhwT2JqZWN0SW50cmluc2lj
LAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRUaGlzTm9BcmdzRnVu
Y3Rpb25DYWxsSW50cmluc2ljLAorICAgIEpTTWFwR2V0SW50cmluc2ljLAorICAgIEpTTWFwSGFz
SW50cmluc2ljLAorICAgIEpTU2V0SGFzSW50cmluc2ljLAogCiAgICAgLy8gR2V0dGVyIGludHJp
bnNpY3MuCiAgICAgVHlwZWRBcnJheUxlbmd0aEludHJpbnNpYywKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIw
NTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDcgKzcyNSw2IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFu
c2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzU2V0UHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6
Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc1NldCksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLlNldEl0ZXJhdG9yUHJpdmF0ZU5hbWUoKSwg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNTZXRJ
dGVyYXRvciksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xv
YmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnNldEl0ZXJh
dG9yTmV4dFByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMCwgU3Ry
aW5nKCksIHByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0KSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuaXNNYXBQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIHRoaXMsIDEsIFN0cmluZygpLCBwcml2YXRlRnVuY0lzTWFwKSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXNBcnJheVByaXZhdGVOYW1lKCksIGFycmF5Q29uc3Ry
dWN0b3ItPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXNBcnJheSksIERvbnRFbnVt
IHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzQXJyYXlDb25zdHJ1Y3RvclByaXZhdGVO
YW1lKCksIHByaXZhdGVGdW5jSXNBcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS5jb25jYXRNZW1jcHlQcml2YXRlTmFtZSgpLCBwcml2YXRlRnVu
Y0NvbmNhdE1lbWNweSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNpb24gMjA1MTM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiwyNyArMjYsNzYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01h
cC5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAiQ29tbW9uSWRlbnRp
ZmllcnMuaCIKICNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJJZGVu
dGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJNYXBE
YXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ6OnNfaW5mbyA9
IHsgIkhhc2hNYXBCdWNrZXQiLCAvKiBwYXJlbnQgY2xhc3MgaW5mbyAqLyBudWxscHRyLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQpIH07CisKK3ZvaWQgSGFzaE1hcEJ1Y2tl
dDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIEhhc2hNYXBCdWNrZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEJ1Y2tldCo+KGNl
bGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
KyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbmV4dCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fcHJldik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPmtleSk7
CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPnZhbHVlKTsKK30KKworY29uc3QgQ2xh
c3NJbmZvIEhhc2hNYXBJbXBsOjpzX2luZm8gPSB7ICJIYXNoTWFwSW1wbCIsIC8qIHBhcmVudCBj
bGFzcyBpbmZvICovIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEltcGwp
IH07CisKK3ZvaWQgSGFzaE1hcEltcGw6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxIYXNoTWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faGVhZCk7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2aXNpdG9yLmNvcHlM
YXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1f
YnVmZmVyLmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygpKTsKK30KKwordm9p
ZCBIYXNoTWFwSW1wbDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9y
JiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCit7CisgICAgQmFzZTo6Y29weUJhY2tpbmdTdG9y
ZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7CisKKyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9
IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOworICAgIGlmICh0b2tlbiA9PSBNYXBCYWNraW5n
U3RvcmVDb3B5VG9rZW4gJiYgdmlzaXRvci5jaGVja0lmU2hvdWxkQ29weSh0aGlzT2JqZWN0LT5t
X2J1ZmZlci5nZXQoKSkpIHsKKyAgICAgICAgSGFzaE1hcEJ1ZmZlciogb2xkQnVmZmVyID0gdGhp
c09iamVjdC0+bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplSW5CeXRl
cyA9IHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhhc2hNYXBCdWZm
ZXIqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWZmZXIqPih2aXNpdG9yLmFsbG9j
YXRlTmV3U3BhY2UoYnVmZmVyU2l6ZUluQnl0ZXMpKTsKKyAgICAgICAgbWVtY3B5KG5ld0J1ZmZl
ciwgb2xkQnVmZmVyLCBidWZmZXJTaXplSW5CeXRlcyk7CisgICAgICAgIHRoaXNPYmplY3QtPm1f
YnVmZmVyLnNldFdpdGhvdXRCYXJyaWVyKG5ld0J1ZmZlcik7CisgICAgICAgIHZpc2l0b3IuZGlk
Q29weShvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICB9Cit9CisKIGNvbnN0IENs
YXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAotdm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCit2b2lkIEpTTWFwOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KikK
IHsKLSAgICBKU01hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwotICAgIHRo
aXNPYmplY3QtPkpTTWFwOjp+SlNNYXAoKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBIYXNoTWFwSW1wbDo6Y3JlYXRlKHZtKSk7CiB9CiAK
IHNpemVfdCBKU01hcDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgSlNNYXAq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAgICBzaXplX3QgbWFwRGF0YVNp
emUgPSB0aGlzT2JqZWN0LT5tX21hcERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7CisgICAgLy9KU01h
cCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOworICAgIC8vc2l6ZV90IG1hcERh
dGFTaXplID0gdGhpc09iamVjdC0+bV9tYXBEYXRhLmNhcGFjaXR5SW5CeXRlcygpOworICAgIHNp
emVfdCBtYXBEYXRhU2l6ZSA9IDA7IC8vIEZJWE1FOgogICAgIHJldHVybiBCYXNlOjplc3RpbWF0
ZWRTaXplKGNlbGwpICsgbWFwRGF0YVNpemU7CiB9CiAKQEAgLTU4LDEzICsxMDcsMTYgQEAgU3Ry
aW5nIEpTTWFwOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplYwogdm9pZCBKU01hcDo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCkt
Pm1fbWFwRGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIC8vanNDYXN0PEpT
TWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworCisg
ICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKKyAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXApOwogfQogCi12b2lkIEpTTWFwOjpjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tl
bikKKy8qCitzaXplX3QgSlNNYXA6OnNpemUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEJhc2U6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwotICAgIGpzQ2FzdDxKU01h
cCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7Cisg
ICAgcmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4ZWMpOwogfQogCiBib29sIEpTTWFwOjpoYXMoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKQEAgLTcyLDIyICsxMjQsMTQgQEAgYm9vbCBKU01h
cDo6aGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZQogICAgIHJldHVybiBtX21hcERhdGEuY29u
dGFpbnMoZXhlYywga2V5KTsKIH0KIAotc2l6ZV90IEpTTWFwOjpzaXplKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLnNpemUoZXhlYyk7Ci19Ci0KIEpTVmFsdWUgSlNN
YXA6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogewotICAgIEpTVmFsdWUgcmVz
dWx0ID0gbV9tYXBEYXRhLmdldChleGVjLCBrZXkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBt
X21hcC5nZXQoZXhlYywga2V5KTsKIH0KIAogdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgbV9tYXBEYXRhLnNldChleGVj
LCB0aGlzLCBrZXksIHZhbHVlKTsKKyAgICBtX21hcC5zZXQoZXhlYywgdGhpcywga2V5LCB2YWx1
ZSk7CiB9CiAKIHZvaWQgSlNNYXA6OmNsZWFyKEV4ZWNTdGF0ZSopCkBAIC05OSw1ICsxNDMsNiBA
QCBib29sIEpTTWFwOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiB7CiAgICAgcmV0dXJu
IG1fbWFwRGF0YS5yZW1vdmUoZXhlYywga2V5KTsKIH0KKyovCiAKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTEgKzMy
LDM1NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSGFzaE1hcEJ1Y2tldCA6IHB1Ymxp
YyBKU0NlbGwgeworICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hN
YXBCdWNrZXQqIGNyZWF0ZShWTSYgdm0pCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0KiBi
dWNrZXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNoTWFwQnVja2V0Pih2bS5oZWFw
KSkgSGFzaE1hcEJ1Y2tldCh2bSwgdm0uaGFzaE1hcEJ1Y2tldFN0cnVjdHVyZS5nZXQoKSk7Cisg
ICAgICAgIGJ1Y2tldC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBSRUxFQVNFX0FTU0VS
VCghYnVja2V0LT5uZXh0KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghYnVja2V0LT5wcmV2
KCkpOworICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKworICAgIERFQ0xBUkVfRVhQT1JU
X0lORk87CisKKyAgICBIYXNoTWFwQnVja2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsgfQorCisgICAgdm9pZCBzZXRO
ZXh0KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgbV9uZXh0
LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9CisgICAgdm9pZCBzZXRQcmV2KFZNJiB2bSwg
SGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgbV9wcmV2LnNldCh2bSwgdGhp
cywgYnVja2V0KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBIYXNoTWFwQnVja2V0KiBuZXh0KCkgY29uc3QgeyBy
ZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsg
cmV0dXJuIG1fcHJldi5nZXQoKTsgfQorCisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+
IG1fbmV4dDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9wcmV2OworICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBrZXk7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVl
OworICAgIGJvb2wgZGVsZXRlZCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBIYXNoTWFwQnVmZmVy
IHsKK3B1YmxpYzoKKyAgICBIYXNoTWFwQnVmZmVyKCkgPSBkZWxldGU7CisKKyAgICBzdGF0aWMg
c2l6ZV90IGFsbG9jYXRpb25TaXplKHVpbnQzMl90IGNhcGFjaXR5KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXQqKTsKKyAgICB9CisKKyAgICBI
YXNoTWFwQnVja2V0KiogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldCoqPih0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFz
aE1hcEJ1ZmZlciogY3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdWludDMyX3QgY2FwYWNp
dHkpCisgICAgeworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVmZmVy
OjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSk7CisgICAgICAgIHZvaWQqIGRhdGEgPSBudWxscHRy
OworICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyKHZtLmhlYXApOworICAgICAgICBpZiAo
IXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG93bmVyLCBhbGxvY2F0aW9uU2l6ZSwgJmRhdGEp
KQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gIEZJWE1FOiB0
aHJvdyBhbiBleGNlcHRpb24gaGVyZS4KKyAgICAgICAgSGFzaE1hcEJ1ZmZlciogYnVmZmVyID0g
c3RhdGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlcio+KGRhdGEpOworICAgICAgICBtZW1zZXQoYnVmZmVy
LCAtMSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKwor
fTsKKworLy8gRklYTUU6IG1ha2UgdGhpcyBBTFdBWVNfSU5MSU5FIGluc2lkZSBQcm9wZXJ0eURl
c2NyaXB0b3IKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgc2FtZVZhbHVlTWFwKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgaWYgKGEgPT0gYikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFhLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBhLCBiKTsKKyAgICBpZiAoIWIuaXNOdW1iZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvdWJsZSB4ID0gYS5hc051bWJlcigpOworICAg
IGRvdWJsZSB5ID0gYi5hc051bWJlcigpOworICAgIGJvb2wgeElzTmFOID0gc3RkOjppc25hbih4
KTsKKyAgICBib29sIHlJc05hTiA9IHN0ZDo6aXNuYW4oeSk7CisgICAgaWYgKHhJc05hTiB8fCB5
SXNOYU4pCisgICAgICAgIHJldHVybiB4SXNOYU4gJiYgeUlzTmFOOworICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8dWludDY0X3Q+KHgpID09IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeSk7Cit9CisK
K0FMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkgeworICAgICAgICBkb3VibGUg
ZCA9IHZhbHVlLmFzRG91YmxlKCk7CisgICAgICAgIGlmICghc3RkOjppc25hbihkKSkgeworICAg
ICAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgICAgICAgICAgaWYgKGkg
PT0gZCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIC8vc3RhdGljIGRvdWJs
ZSBzbG93Q2FzZXMgPSAwLjA7CisgICAgICAgIC8vc3RhdGljIGRvdWJsZSBoYXNIYXNoID0gMC4w
OworICAgICAgICAvL2RhdGFMb2coImpzTWFwSGFzaCBzbG93IHBhdGggc3RyaW5nIVxuIik7Cisg
ICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSk7CisgICAgICAgIGNvbnN0
IFN0cmluZyYgd3RmU3RyaW5nID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgICAg
ICAvL3Nsb3dDYXNlcysrOworICAgICAgICAvL2lmICh3dGZTdHJpbmcuaW1wbCgpLT5oYXNIYXNo
KCkpCisgICAgICAgIC8vICAgIGhhc0hhc2grKzsKKyAgICAgICAgLy9kYXRhTG9nKCJQZXJjZW50
IGhhc2giLCBoYXNIYXNoL3Nsb3dDYXNlcywgIlxuIik7CisgICAgICAgIHJldHVybiB3dGZTdHJp
bmcuaW1wbCgpLT5oYXNoKCk7CisgICAgfQorICAgIHVpbnQ2NF90IHJhd1ZhbHVlID0gSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICByZXR1cm4gV1RGOjppbnRIYXNoKHJhd1ZhbHVlKTsKK30K
KworCitjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVkZWYgSlND
ZWxsIEJhc2U7CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNo
TWFwSW1wbCogY3JlYXRlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBJbXBsKiBpbXBs
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXApKSBIYXNo
TWFwSW1wbCh2bSwgdm0uaGFzaE1hcEltcGxTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBpbXBs
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBz
dGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRv
a2VuKTsKKworICAgIEhhc2hNYXBJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAg
ICAsIG1fZGVsZXRlQ291bnQoMCkKKyAgICAgICAgLCBtX2NhcGFjaXR5KDQpCisgICAgeworICAg
IH0KKworICAgIEhhc2hNYXBCdWNrZXQqKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYnVmZmVyLmdldCgpLT5idWZmZXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKKworICAgICAgICBtX2J1ZmZlci5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWZmZXI6OmNyZWF0
ZSh2bSwgdGhpcywgbV9jYXBhY2l0eSkpOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FwYWNpdHk7IGkrKykK
KyAgICAgICAgICAgICAgICBBU1NFUlQoaXNFbXB0eShidWZmZXIoKVtpXSkpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gRklYTUU6IHNvbWUga2luZCBvZiB3cml0ZSBiYXJyaWVyIG9uIG91ciBv
d25lcj8KKyAgICAgICAgbV9oZWFkLnNldCh2bSwgdGhpcywgSGFzaE1hcEJ1Y2tldDo6Y3JlYXRl
KHZtKSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXQ6OmNyZWF0
ZSh2bSkpOworCisgICAgICAgIG1faGVhZC0+c2V0TmV4dCh2bSwgbV90YWlsLmdldCgpKTsKKyAg
ICAgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgICAgICBtX2hlYWQt
PmRlbGV0ZWQgPSB0cnVlOworICAgICAgICBtX3RhaWwtPmRlbGV0ZWQgPSB0cnVlOworCisgICAg
fQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXQqIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0Kj4oc3RhdGljX2Nhc3Q8dWludHB0
cl90PigtMSkpOworICAgIH0KKworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFbXB0
eShIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICByZXR1cm4gYnVja2V0ID09
IGVtcHR5VmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldCogZGVsZXRl
ZFZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tl
dCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGlzRGVsZXRlZChIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgewor
ICAgICAgICByZXR1cm4gYnVja2V0ID09IGRlbGV0ZWRWYWx1ZSgpOworICAgIH0KKworCisgICAg
QUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2Fw
YWNpdHkgLSAxOworICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBrZXkp
ICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigp
OworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworCisgICAg
ICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICBpZiAoIWlzRGVsZXRl
ZChidWNrZXQpICYmIHNhbWVWYWx1ZU1hcChleGVjLCBrZXksIGJ1Y2tldC0+a2V5LmdldCgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7CisgICAgICAgICAgICBpbmRl
eCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRl
eF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAg
IHsKKyAgICAgICAgaWYgKEhhc2hNYXBCdWNrZXQqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMs
IGtleSkpCisgICAgICAgICAgICByZXR1cm4gKCpidWNrZXQpLT52YWx1ZS5nZXQoKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29s
IGhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEhZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIGtleSwgSlNWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGNv
bnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMyX3QgaW5k
ZXggPSBqc01hcEhhc2goZXhlYywga2V5KSAmIG1hc2s7CisgICAgICAgIEhhc2hNYXBCdWNrZXQq
KiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0
ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkgJiYgIWlz
RGVsZXRlZChidWNrZXQpKSB7CisgICAgICAgICAgICBpZiAoc2FtZVZhbHVlTWFwKGV4ZWMsIGtl
eSwgYnVja2V0LT5rZXkuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgYnVja2V0LT52YWx1ZS5z
ZXQodm0sIG93bmVyLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAg
ICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldCogbmV3RW50cnkgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBu
ZXdFbnRyeTsKKyAgICAgICAgbmV3RW50cnktPmtleS5zZXQodm0sIG93bmVyLCBrZXkpOworICAg
ICAgICBuZXdFbnRyeS0+dmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAgICBuZXdF
bnRyeS0+ZGVsZXRlZCA9IGZhbHNlOworICAgICAgICBIYXNoTWFwQnVja2V0KiBuZXdUYWlsID0g
SGFzaE1hcEJ1Y2tldDo6Y3JlYXRlKHZtKTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwgdGhpcywg
bmV3VGFpbCk7CisgICAgICAgIG5ld1RhaWwtPnNldFByZXYodm0sIG5ld0VudHJ5KTsKKyAgICAg
ICAgbmV3VGFpbC0+ZGVsZXRlZCA9IHRydWU7CisgICAgICAgIG5ld0VudHJ5LT5zZXROZXh0KHZt
LCBuZXdUYWlsKTsKKyAgICAgICAgdWludDMyX3QgbmV3U2l6ZSA9ICsrbV9zaXplOworICAgICAg
ICBpZiAoMipuZXdTaXplID4gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgIHJlaGFzaChleGVjKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0KiogYnVja2V0ID0gZmlu
ZEJ1Y2tldChleGVjLCBrZXkpOworICAgICAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICAvLyBG
SVhNRTogc3RvcCBsZWFraW5nIG1lbW9yeSBoZXJlLCBhbmQgZmlndXJlIG91dCBpdGVyYXRvcnMu
CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGltcGwgPSAqYnVja2V0OworICAgICAgICBpbXBsLT5u
ZXh0KCktPnNldFByZXYodm0sIGltcGwtPnByZXYoKSk7CisgICAgICAgIGltcGwtPnByZXYoKS0+
c2V0TmV4dCh2bSwgaW1wbC0+bmV4dCgpKTsKKyAgICAgICAgaW1wbC0+ZGVsZXRlZCA9IHRydWU7
CisKKyAgICAgICAgKmJ1Y2tldCA9IGRlbGV0ZWRWYWx1ZSgpOworCisgICAgICAgIG1fZGVsZXRl
Q291bnQrKzsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJlaGFz
aChFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
CisgICAgICAgIG1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5ICogMjsKKyAgICAgICAgbV9idWZmZXIu
c2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVmZmVyOjpjcmVhdGUodm0sIHRoaXMsIG1fY2FwYWNpdHkp
KTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyBpKyspCisgICAgICAgICAgICAgICAgQVNTRVJU
KGlzRW1wdHkodGhpcy0+YnVmZmVyKClbaV0pKTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hN
YXBCdWNrZXQqIGl0ZXIgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCog
ZW5kID0gbV90YWlsLmdldCgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBh
Y2l0eSAtIDE7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFj
aXR5IC0gMSkpKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZl
cigpOworICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAgIHVpbnQzMl90
IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIGl0ZXItPmtleS5nZXQoKSkgJiBtYXNrOworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IGJ1ZmZlcltp
bmRleF07CisgICAgICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICAg
ICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2luZGV4XSA9IGl0ZXI7CisgICAgICAgICAgICBp
dGVyID0gaXRlci0+bmV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSB1aW50MzJfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1f
c2l6ZSA+PSBtX2RlbGV0ZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZSAtIG1fZGVsZXRl
Q291bnQ7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSog
ZXhlYykKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIG1fc2l6
ZSA9IDA7CisgICAgICAgIG1fZGVsZXRlQ291bnQgPSAwOworICAgICAgICBIYXNoTWFwQnVja2V0
KiBoZWFkID0gbV9oZWFkLmdldCgpOworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBt
X2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogdGFpbCA9IG1fdGFpbC5nZXQo
KTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAhPSB0YWlsKSB7CisgICAgICAgICAgICBIYXNoTWFw
QnVja2V0KiBuZXh0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgICAgICAvLyBXZSByZXN0YXJ0
IGVhY2ggaXRlcmF0b3IgYnkgcG9pbnRpbmcgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisg
ICAgICAgICAgICBidWNrZXQtPnNldE5leHQodm0sIGhlYWQpOworICAgICAgICAgICAgYnVja2V0
ID0gbmV4dDsKKyAgICAgICAgfQorICAgICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5n
ZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAg
ICAgbV9jYXBhY2l0eSA9IDQ7CisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhpcywgSGFzaE1h
cEJ1ZmZlcjo6Y3JlYXRlKHZtLCB0aGlzLCBtX2NhcGFjaXR5KSk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBzaXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldCopOworICAgIH0KKwor
Ly8gRklYTUU6IG1ha2UgcHJpdmF0ZS4KK3B1YmxpYzoKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1h
cEJ1Y2tldD4gbV9oZWFkOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX3RhaWw7
CisgICAgQ29weUJhcnJpZXI8SGFzaE1hcEJ1ZmZlcj4gbV9idWZmZXI7CisgICAgdWludDMyX3Qg
bV9zaXplOworICAgIHVpbnQzMl90IG1fZGVsZXRlQ291bnQ7CisgICAgdWludDMyX3QgbV9jYXBh
Y2l0eTsKK307CisKIGNsYXNzIEpTTWFwSXRlcmF0b3I7CiAKLWNsYXNzIEpTTWFwIDogcHVibGlj
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTTWFwIDogcHVibGljIEpTTm9uRmluYWxP
YmplY3QgewogcHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsK
KyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAogICAgIGZyaWVuZCBjbGFzcyBK
U01hcEl0ZXJhdG9yOwogCkBAIC05Miw0MiArNDM4LDY0IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU01hcFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNNYXAqIGNy
ZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSlNNYXAq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNYXA+KHZtLmhlYXApKSBK
U01hcCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBzdHJ1Y3R1cmUtPmdsb2Jh
bE9iamVjdCgpKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwor
CiAgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0
dXJlKTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBz
aXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVjU3RhdGUqLCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBi
b29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVf
dCBzaXplKEV4ZWNTdGF0ZSopCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnNpemUoKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmdldChleGVjLCBrZXkp
OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+aGFzKGV4ZWMsIGtleSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9tYXAtPnNldChleGVj
LCB0aGlzLCBrZXksIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4
ZWMpCisgICAgeworICAgICAgICBtX21hcC0+Y2xlYXIoZXhlYyk7CisgICAgfQorICAgIGJvb2wg
cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gbV9tYXAtPnJlbW92ZShleGVjLCBrZXkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBKU01h
cChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0
ZWRTaXplKEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCos
IENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwogCi0gICAgTWFwRGF0YSBtX21hcERhdGE7
CisgICAgLy8gRklYTUU6IGRvbid0IG1ha2UgdGhpcyBwdWJsaWMuCitwdWJsaWM6CisgICAgV3Jp
dGVCYXJyaWVyPEhhc2hNYXBJbXBsPiBtX21hcDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2lu
Y2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMu
aCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGlu
ZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgpAQCAtNDEsNiArNDQsNyBAQCB2b2lkIEpTTWFwSXRl
cmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIG1fbWFwLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0
ZXJhdG9yKHZtLCBtX21hcC0+bV9tYXAtPm1faGVhZC5nZXQoKSk7CiB9CiAKIHZvaWQgSlNNYXBJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQpAQCAtNDksNiArNTMsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbWFwKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9pdGVyKTsKIH0KIAogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTYyLDgg
KzY3LDkgQEAgSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcgogCiBKU01h
cEl0ZXJhdG9yKiBKU01hcEl0ZXJhdG9yOjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
YXV0byBjbG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgp
LCBtX2tpbmQpOwotICAgIGNsb25lLT5tX2l0ZXJhdG9yID0gbV9pdGVyYXRvcjsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2xvbmUgPSBKU01hcEl0ZXJhdG9yOjpjcmVhdGUo
dm0sIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgbV9tYXAuZ2V0KCksIG1fa2luZCk7CisgICAgY2xvbmUtPnNldEl0ZXJhdG9yKHZtLCBtX2l0
ZXIuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjA1MTM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MSw1MiArNTEsNjcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5zdGFuY2U7
CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlJiB2
YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIGFkdmFuY2VJdGVyKEV4ZWNT
dGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpT
VmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIpKQorICAgICAg
ICBIYXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgpOworICAgICAgICBpZiAoIXByZXYp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVj
a2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgJiYgYnVja2V0LT5k
ZWxldGVkKSB7CisgICAgICAgICAgICBwcmV2ID0gYnVja2V0OworICAgICAgICAgICAgYnVja2V0
ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAg
ICAgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIG51bGxwdHIpOworICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0o
KSwgYnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0ZXIgb24gdGhlIGxhc3QgdmFsdWUuCisgICAgICAg
IHJldHVybiBidWNrZXQ7CisgICAgfQorICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2
YW5jZUl0ZXIoZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgICAgIGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZhbHVlKQotICAgICAgICAg
ICAgdmFsdWUgPSBwYWlyLnZhbHVlOworICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPnZhbHVl
LmdldCgpOwogICAgICAgICBlbHNlIGlmIChtX2tpbmQgPT0gSXRlcmF0ZUtleSkKLSAgICAgICAg
ICAgIHZhbHVlID0gcGFpci5rZXk7CisgICAgICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+a2V5Lmdl
dCgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoY2FsbEZy
YW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBh
aXIoZXhlYywgYnVja2V0LT5rZXkuZ2V0KCksIGJ1Y2tldC0+dmFsdWUuZ2V0KCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIG5leHRLZXlWYWx1ZShKU1ZhbHVlJiBr
ZXksIEpTVmFsdWUmIHZhbHVlKQorICAgIGJvb2wgbmV4dEtleVZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFdURjo6S2V5
VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRv
ci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBhZHZhbmNlSXRl
cihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAga2V5ID0gcGFpci5rZXk7Ci0gICAgICAgIHZhbHVlID0gcGFpci52YWx1ZTsK
KyAgICAgICAga2V5ID0gYnVja2V0LT5rZXkuZ2V0KCk7CisgICAgICAgIHZhbHVlID0gYnVja2V0
LT52YWx1ZS5nZXQoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdm9pZCBm
aW5pc2goKQogICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsKKyAgICAgICAgLy9t
X2l0ZXJhdG9yLmZpbmlzaCgpOwogICAgIH0KIAogICAgIEl0ZXJhdGlvbktpbmQga2luZCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWFwLmdldCgpOyB9CiAgICAgSlNNYXBJdGVyYXRvciogY2xvbmUoRXhlY1N0
YXRlKik7CiAKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JEYXRhKiBpdGVyYXRvckRhdGEo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2l0ZXJhdG9yOwotICAgIH0KLQogcHJpdmF0ZToK
LSAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTWFwKiBp
dGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAgIEpTTWFwSXRlcmF0b3IoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNNYXAqLCBJdGVyYXRpb25LaW5kIGtpbmQpCiAg
ICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0
ZWRPYmplY3QtPm1fbWFwRGF0YS5jcmVhdGVJdGVyYXRvckRhdGEodGhpcykpCiAgICAgICAgICwg
bV9raW5kKGtpbmQpCisgICAgeyB9CisKKyAgICB2b2lkIHNldEl0ZXJhdG9yKFZNJiB2bSwgSGFz
aE1hcEJ1Y2tldCogYnVja2V0KQogICAgIHsKKyAgICAgICAgbV9pdGVyLnNldCh2bSwgdGhpcywg
YnVja2V0KTsKICAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNNYXAqKTsKQEAgLTEwNCw3ICsxMTksNyBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRl
QmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAgSlNNYXA6Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSBt
X2l0ZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX2l0ZXI7CiAgICAg
SXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVT
VFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0LmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0Iiwg
JkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAotdm9pZCBK
U1NldDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit2b2lkIEpTU2V0OjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCiB7Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsK
LSAgICB0aGlzT2JqZWN0LT5KU1NldDo6fkpTU2V0KCk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOworICAgIG1fbWFwLnNldCh2bSwgdGhpcywgSGFzaE1hcEltcGw6OmNyZWF0ZSh2bSkp
OwogfQogCiBTdHJpbmcgSlNTZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNT
dGF0ZSopCkBAIC01MCwyMyArNTAsMjAgQEAgU3RyaW5nIEpTU2V0Ojp0b1N0cmluZ05hbWUoY29u
c3QgSlNPYmplYwogCiBzaXplX3QgSlNTZXQ6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQog
ewotICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgc2l6
ZV90IHNldERhdGFTaXplID0gdGhpc09iamVjdC0+bV9zZXREYXRhLmNhcGFjaXR5SW5CeXRlcygp
OworICAgIC8vSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsKKyAgICAv
L3NpemVfdCBzZXREYXRhU2l6ZSA9IHRoaXNPYmplY3QtPm1fc2V0RGF0YS5jYXBhY2l0eUluQnl0
ZXMoKTsKKyAgICBzaXplX3Qgc2V0RGF0YVNpemUgPSAwOwogICAgIHJldHVybiBCYXNlOjplc3Rp
bWF0ZWRTaXplKGNlbGwpICsgc2V0RGF0YVNpemU7CiB9CiAKIHZvaWQgSlNTZXQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5t
X3NldERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLX0KLQotdm9pZCBKU1NldDo6
Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5
VG9rZW4gdG9rZW4pCi17Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9y
LCB0b2tlbik7Ci0gICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2lu
Z1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKKyAgICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1NldCo+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7CiB9
CiAKKy8qCiBib29sIEpTU2V0OjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQog
ewogICAgIHJldHVybiBtX3NldERhdGEuY29udGFpbnMoZXhlYywgdmFsdWUpOwpAQCAtOTEsNSAr
ODgsNiBAQCBib29sIEpTU2V0OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiB7CiAgICAg
cmV0dXJuIG1fc2V0RGF0YS5yZW1vdmUoZXhlYywgdmFsdWUpOwogfQorKi8KIAogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw2ICsyNyw3IEBACiAjZGVmaW5lIEpTU2V0X2gKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxl
T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2lu
Y2x1ZGUgIk1hcERhdGEuaCIKIApAQCAtMzQsOSArMzUsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
Y2xhc3MgSlNTZXRJdGVyYXRvcjsKIAotY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGli
bGVPYmplY3QgeworY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiBwdWJs
aWM6Ci0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOworICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOwogCiAgICAgZnJpZW5kIGNsYXNzIEpTU2V0SXRlcmF0b3I7
CiAKQEAgLTg4LDcgKzg5LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTU2V0VHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05NywzMiArOTgsNTIgQEAgcHVibGljOgogICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAg
ICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAog
ICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZSk7CiAgICAgfQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6
ZV90IHNpemUoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoRXhl
Y1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29s
IHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUq
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5zaXplKCk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fbWFwLT5oYXMoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgewor
ICAgICAgICAvLyBGSVhNRTogYWJzdHJhY3QgSGFzaE1hcEJ1Y2tldC9IYXNoTWFwSW1wbCB0byBu
b3Qgd2FzdGUgc3Bhc2UgZm9yIGp1bmsgdmFsdWUuCisgICAgICAgIG1fbWFwLT5zZXQoZXhlYywg
dGhpcywga2V5LCBqc051bGwoKSk7CisgICAgfQogCi1wcml2YXRlOgorICAgIHZvaWQgY2xlYXIo
RXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgbV9tYXAtPmNsZWFyKGV4ZWMpOworICAg
IH0KKworICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAtPnJlbW92ZShleGVjLCBrZXkpOworICAgIH0KKworcHVi
bGljOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fc2V0RGF0YSh2bSwgdGhpcykKKyAgICAg
ICAgLy8sIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlND
ZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0
b3ImLCBDb3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpT
T2JqZWN0KiwgRXhlY1N0YXRlKik7CiAKLSAgICBTZXREYXRhIG1fc2V0RGF0YTsKKyAgICBXcml0
ZUJhcnJpZXI8SGFzaE1hcEltcGw+IG1fbWFwOworICAgIC8vU2V0RGF0YSBtX3NldERhdGE7CiB9
OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAg
dm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZp
bmlzaENyZWF0aW9uKHZtKTsKICAgICBtX3NldC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0
KTsKKyAgICBzZXRJdGVyYXRvcih2bSwgbV9zZXQtPm1fbWFwLT5tX2hlYWQuZ2V0KCkpOwogfQog
CiB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90Vmlz
aXRvciYgdmlzaXRvcikKQEAgLTQ5LDYgKzUwLDcgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NldCk7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7CiB9CiAKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6
Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFs
dWUpCkBAIC02Miw4ICs2NCw5IEBAIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihD
YWxsRnIKIAogSlNTZXRJdGVyYXRvciogSlNTZXRJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBl
eGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBKU1NldEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0o
KSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgp
LCBtX3NldC5nZXQoKSwgbV9raW5kKTsKLSAgICBjbG9uZS0+bV9pdGVyYXRvciA9IG1faXRlcmF0
b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIGNsb25lID0gSlNTZXRJdGVy
YXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJh
dG9yU3RydWN0dXJlKCksIG1fc2V0LmdldCgpLCBtX2tpbmQpOworICAgIGNsb25lLT5zZXRJdGVy
YXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAgICByZXR1cm4gY2xvbmU7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9u
IDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNTIsNDYgKzUyLDY1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBhZHZh
bmNlSXRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBXVEY6OktleVZhbHVlUGFp
cjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0b3IubmV4dChw
YWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogcHJldiA9IG1faXRlci5nZXQoKTsKKyAgICAg
ICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhhc2hN
YXBCdWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOworICAgICAgICB3aGlsZSAoYnVja2V0
ICYmIGJ1Y2tldC0+ZGVsZXRlZCkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAg
ICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICgh
YnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJh
dG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZh
bHVlLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKworICAgIGJvb2wgbmV4dChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tl
dCogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZh
bHVlIHx8IG1fa2luZCA9PSBJdGVyYXRlS2V5KQotICAgICAgICAgICAgdmFsdWUgPSBwYWlyLmtl
eTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT5rZXkuZ2V0KCk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWly
LmtleSk7CisgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXku
Z2V0KCksIGJ1Y2tldC0+a2V5LmdldCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
CiAgICAgdm9pZCBmaW5pc2goKQogICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsK
KyAgICAgICAgLy8gRklYTUU6IGZpZ3VyZSB0aGlzIG91dC4KKyAgICAgICAgLy9tX2l0ZXJhdG9y
LmZpbmlzaCgpOwogICAgIH0KIAogICAgIEl0ZXJhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZDsgfQogICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0LmdldCgpOyB9CiAgICAgSlNTZXRJdGVyYXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAK
LSAgICBKU1NldDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuICZtX2l0ZXJhdG9yOwotICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU1Nl
dEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiBpdGVyYXRlZE9i
amVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgSlNTZXQqLCBJdGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3Qt
Pm1fc2V0RGF0YS5jcmVhdGVJdGVyYXRvckRhdGEodGhpcykpCiAgICAgICAgICwgbV9raW5kKGtp
bmQpCiAgICAgewogICAgIH0KIAorICAgIHZvaWQgc2V0SXRlcmF0b3IoVk0mIHZtLCBIYXNoTWFw
QnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICBtX2l0ZXIuc2V0KHZtLCB0aGlzLCBidWNr
ZXQpOyAKKyAgICB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9u
KFZNJiwgSlNTZXQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIo
Q2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBt
X3NldDsKLSAgICBKU1NldDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAg
V3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1faXRlcjsKICAgICBJdGVyYXRpb25LaW5kIG1f
a2luZDsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJ
dGVyYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2
aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDEwIEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7
CiAgICAgTW9kdWxlRW52aXJvbm1lbnRUeXBlLAogICAgIFJlZ0V4cE9iamVjdFR5cGUsCiAgICAg
UHJveHlPYmplY3RUeXBlLAorICAgIEpTTWFwVHlwZSwKKyAgICBKU1NldFR5cGUsCiAKLSAgICBM
YXN0SlNDT2JqZWN0VHlwZSA9IFByb3h5T2JqZWN0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlw
ZSA9IEpTTWFwVHlwZSwKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU1R5cGUpID09IHNp
emVvZih1aW50OF90KSwgc2l6ZW9mX2pzdHlwZV9pc19vbmVfYnl0ZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUu
Y3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE0ICszMiwyNCBA
QAogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVz
LmgiCiAKKyNpbmNsdWRlICJNYXBJdGVyYXRvclByb3RvdHlwZS5sdXQuaCIKKworLyogU291cmNl
IGZvciBNYXBJdGVyYXRvclByb3RvdHlwZS5sdXQuaAorQGJlZ2luIG1hcEl0ZXJhdG9yUHJvdG90
eXBlVGFibGUKK0BlbmQKKyovCisgIC8vbmV4dCAgICAgIEpTQnVpbHRpbiAgRG9udEVudW18RnVu
Y3Rpb24gMAorCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIE1hcEl0ZXJhdG9y
UHJvdG90eXBlOjpzX2luZm8gPSB7ICJNYXAgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKE1hcEl0ZXJhdG9yUHJvdG90eXBlKSB9OworY29uc3QgQ2xhc3NJ
bmZvIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJNYXAgSXRlcmF0b3IiLCAmQmFz
ZTo6c19pbmZvLCAmbWFwSXRlcmF0b3JQcm90b3R5cGVUYWJsZSwgQ1JFQVRFX01FVEhPRF9UQUJM
RShNYXBJdGVyYXRvclByb3RvdHlwZSkgfTsKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChFeGVjU3RhdGUqKTsKIAogdm9p
ZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0KQogeworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOwor
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlw
ZS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBJdGVyYXRvclByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw4IEBAIGNs
YXNzIE1hcEl0ZXJhdG9yUHJvdG90eXBlIDogcHVibGljIEpTTm8KIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIAorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEhhc1N0YXRpY1Byb3BlcnR5VGFibGUgfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKKwogICAgIHN0YXRpYyBNYXBJdGVyYXRvclByb3RvdHlwZSogY3JlYXRlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewogICAgICAgICBNYXBJdGVyYXRvclByb3RvdHlwZSogcHJvdG90eXBlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8TWFwSXRlcmF0b3JQcm90b3R5cGU+KHZtLmhlYXApKSBNYXBJdGVyYXRv
clByb3RvdHlwZSh2bSwgc3RydWN0dXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNiArNDgsOCBAQCBjb25zdCBDbGFzc0luZm8gTWFwUHJvdG90eXBlOjpzX2luZm8gPSB7
CiAvKiBTb3VyY2UgZm9yIE1hcFByb3RvdHlwZS5sdXQuaAogQGJlZ2luIG1hcFByb3RvdHlwZVRh
YmxlCiAgIGZvckVhY2ggICBKU0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDAKKyAgaGFzICAg
ICAgIEpTQnVpbHRpbiAgRG9udEVudW18RnVuY3Rpb24gMQorICBsaXN0QXNBcnJheSAgICAgICBK
U0J1aWx0aW4gIERvbnRFbnVtfEZ1bmN0aW9uIDAKIEBlbmQKICovCiAKQEAgLTcwLDE1ICs3Miwx
NiBAQCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAKICAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVh
ciwgbWFwUHJvdG9GdW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBt
YXBQcm90b0Z1bmNEZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dl
dCwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSk7
CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSwgSlNNYXBH
ZXRJbnRyaW5zaWMpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVu
dW0sIDEsIEpTTWFwSGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIG1hcFByb3RvRnVuY1NldCwgRG9u
dEVudW0sIDIpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCksIG1hcFByb3Rv
RnVuY0tleXMsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNO
YW1lKCksIG1hcFByb3RvRnVuY1ZhbHVlcywgRG9udEVudW0sIDApOwogCi0gICAgLy8gUHJpdmF0
ZSBnZXQgLyBzZXQgb3BlcmF0aW9ucy4KLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2YXRlTmFt
ZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5z
ZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKKyAgICAvL0pT
RnVuY3Rpb24qIGdldEZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9u
KHZtLCBtYXBQcm90b3R5cGVHZXRDb2RlR2VuZXJhdG9yKHZtKSwgZ2xvYmFsT2JqZWN0LCAiZ2V0
Iik7CisgICAgLy9KU0Z1bmN0aW9uKiBzZXRGdW5jdGlvbiA9IEpTRnVuY3Rpb246OmNyZWF0ZUJ1
aWx0aW5GdW5jdGlvbih2bSwgbWFwUHJvdG90eXBlU2V0Q29kZUdlbmVyYXRvcih2bSksIGdsb2Jh
bE9iamVjdCwgInNldCIpOworICAgIC8vcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIGdldEZ1bmN0
aW9uLCBEb250RW51bSk7CisgICAgLy9wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgc2V0RnVuY3Rp
b24sIERvbnRFbnVtKTsKIAogICAgIEpTRnVuY3Rpb24qIGVudHJpZXMgPSBKU0Z1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkuZW50cmllc1B1YmxpY05hbWUoKS5zdHJpbmcoKSwgbWFwUHJvdG9GdW5jRW50cmllcyk7CiAg
ICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCksIGVudHJpZXMsIERvbnRFbnVtKTsKQEAgLTkw
LDE2ICs5MywxMyBAQCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAK
IEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRNYXAoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUgdGhpc1ZhbHVlKQogewotICAgIGlmICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsK
KyAgICBpZiAoIXRoaXNWYWx1ZS5pc0NlbGwoKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2Fs
bEZyYW1lLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBKU01hcCogbWFwID0ganNEeW5hbWlj
Q2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgdGhyb3dU
eXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9u
IG5vbi1NYXAgb2JqZWN0IikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAg
cmV0dXJuIG1hcDsKKyAgICBpZiAodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNNYXBU
eXBlKQorICAgICAgICByZXR1cm4ganNDYXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1
bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTE3NywxMSArMTc3LDYgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bgogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5j
YWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmos
IEl0ZXJhdGVLZXkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRl
RnVuY0lzTWFwKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkpKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJ
dGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNN
YXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwpAQCAtMTk0LDcgKzE4OSw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBBU1NFUlQoanNEeW5h
bWljQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU01hcEl0
ZXJhdG9yKiBpdGVyYXRvciA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVl
KCkpOwogICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlW
YWx1ZShrZXksIHZhbHVlKSkgeworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGV4ZWMs
IGtleSwgdmFsdWUpKSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0PEpT
QXJyYXkqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJlc3VsdEFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBrZXkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0
RGlyZWN0SW5kZXgoZXhlYywgMSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xv
YmFsT2JqZWN0Kik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVG
dW5jSXNNYXAoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZh
dGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSopOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlzaW9u
IDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKFZNJiB2bQogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmFkZCwgc2V0UHJvdG9GdW5jQWRkLCBEb250RW51bSwg
MSk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+Y2xlYXIsIHNldFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVs
ZXRlS2V5d29yZCwgc2V0UHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBz
ZXRQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBzZXRQcm90
b0Z1bmNIYXMsIERvbnRFbnVtLCAxLCBKU1NldEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuZW50cmllc1B1YmxpY05hbWUoKSwgc2V0UHJvdG9GdW5jRW50cmllcywgRG9udEVudW0s
IDApOwogCiAgICAgSlNGdW5jdGlvbiogdmFsdWVzID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1
YmxpY05hbWUoKS5zdHJpbmcoKSwgc2V0UHJvdG9GdW5jVmFsdWVzKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBA
QAogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTTWFw
LmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5
TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKQEAg
LTI0OSw2ICsyNTAsOCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUp
CiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0
dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKICNlbmRpZgorICAgIGhhc2hNYXBCdWNrZXRTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBIYXNoTWFwQnVja2V0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CisgICAgaGFzaE1hcEltcGxTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwSW1wbDo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogCiAgICAgaXRlcmF0aW9uVGVybWlu
YXRvci5zZXQoKnRoaXMsIEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdGhpcywgSlNGaW5hbE9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSwgMSkpKTsKICAgICBuYXRpdmVT
dGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBOYXRpdmVTdGRGdW5jdGlvbkNlbGw6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDYgKzMyOSw4IEBAIHB1Ymxp
YzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGhhc2hNYXBCdWNrZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFz
aE1hcEltcGxTdHJ1Y3R1cmU7CiAKICAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5h
dG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2Niw3ICsx
MzY2LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAg
ICAgICAgY2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7CiAgICAgICAgICAgICAgICAgSlNN
YXBJdGVyYXRvciogaXRlcmF0b3IgPSBtYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRv
ci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVy
YXRvci0+bmV4dEtleVZhbHVlKG1fZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAg
IEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKICAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihvYmplY3QpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287466</attachid>
            <date>2016-08-30 17:34:53 -0700</date>
            <delta_ts>2016-08-30 20:31:22 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>120491</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUyMyw2ICszNTIz
LDcgQEAKIAkJNzJBQUY3Q0IxRDBEMzE4QjAwNUU2MEJFIC8qIEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDdXN0
b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTcyQUFGN0NDMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ3VzdG9tR2V0dGVyU2V0dGVy
RnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzdCMjVDQjJDMzA5NEE5
MkEzOEUxREIzIC8qIEpTTW9kdWxlTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTTW9kdWxlTG9hZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5
MDEwNzM3MUQ2Njk3NEMwMDU4MDQyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5qcyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2
YXNjcmlwdDsgcGF0aCA9IE1hcEl0ZXJhdG9yUHJvdG90eXBlLmpzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyogSW5saW5lQWNjZXNzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUFjY2Vzcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MDVCQjY3MUQxMjA1MEUwMDE5RkU1NyAv
KiBJbmxpbmVBY2Nlc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5l
QWNjZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MTYwREJCMUM4RTNFQzgw
MDhDMDg1QSAvKiBQcm94eVJldm9rZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBQcm94eVJldm9rZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03
MDE5LDYgKzcwMjAsNyBAQAogCQkJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5h
bFByb21pc2VDb25zdHJ1Y3Rvci5qcyAqLywKIAkJCQk3Q0Y5QkM1QjFCNjVEOUEzMDA5REIxRUYg
LyogSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJNzAzNTU4N0MxQzQxODQxOTAwNEJEN0JG
IC8qIE1hcFByb3RvdHlwZS5qcyAqLywKKwkJCQk3OTAxMDczNzFENjY5NzRDMDA1ODA0MjIgLyog
TWFwSXRlcmF0b3JQcm90b3R5cGUuanMgKi8sCiAJCQkJRTMwNjc3OTcxQjhCQzZGNTAwM0Y4N0Yw
IC8qIE1vZHVsZUxvYWRlclByb3RvdHlwZS5qcyAqLywKIAkJCQlBNTI3MDQ4NjFEMDI3Qzg4MDAz
NTRDMzcgLyogTnVtYmVyQ29uc3RydWN0b3IuanMgKi8sCiAJCQkJQTE1REU1QzUxQzBGQkY4RDAw
ODkxMzNEIC8qIE51bWJlclByb3RvdHlwZS5qcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EYXRhRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNyArNDUsNyBAQCBlbnVtIERhdGFGb3JtYXQgewogICAgIERhdGFGb3JtYXRCb29sZWFuID0g
NSwKICAgICBEYXRhRm9ybWF0Q2VsbCA9IDYsCiAgICAgRGF0YUZvcm1hdFN0b3JhZ2UgPSA3LAot
ICAgIERhdGFGb3JtYXRKUyA9IDgsCisgICAgRGF0YUZvcm1hdEpTID0gMTYsCiAgICAgRGF0YUZv
cm1hdEpTSW50MzIgPSBEYXRhRm9ybWF0SlMgfCBEYXRhRm9ybWF0SW50MzIsCiAgICAgRGF0YUZv
cm1hdEpTRG91YmxlID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdERvdWJsZSwKICAgICBEYXRh
Rm9ybWF0SlNDZWxsID0gRGF0YUZvcm1hdEpTIHwgRGF0YUZvcm1hdENlbGwsCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHJl
dmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxh
dGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5j
dGlvbi5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAi
U3RyaW5nT2JqZWN0LmgiCkBAIC0zNDYsNiArMzQ4LDEyIEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1
bGF0aW9uRnJvbUNsYXNzSW5mbygKIAogICAgIGlmIChjbGFzc0luZm8gPT0gUmVnRXhwT2JqZWN0
OjppbmZvKCkpCiAgICAgICAgIHJldHVybiBTcGVjUmVnRXhwT2JqZWN0OworCisgICAgaWYgKGNs
YXNzSW5mbyA9PSBKU01hcDo6aW5mbygpKQorICAgICAgICByZXR1cm4gU3BlY01hcE9iamVjdDsK
KworICAgIGlmIChjbGFzc0luZm8gPT0gSlNTZXQ6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNw
ZWNTZXRPYmplY3Q7CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09mKEpTRnVu
Y3Rpb246OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAkocmV2aXNp
b24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDQxICszOSw0MyBAQCBjbGFzcyBTdHJ1Y3R1cmU7
CiAKIHR5cGVkZWYgdWludDY0X3QgU3BlY3VsYXRlZFR5cGU7CiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY05vbmUgICAgICAgICAgICAgICA9IDA7IC8vIFdlIGRvbid0IGtub3cgYW55
dGhpbmcgeWV0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGaW5hbE9iamVjdCAg
ICAgICAgPSAxdSA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdSA8PCAx
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0FycmF5Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNGdW5jdGlvbiAgICAgICAgICAgPSAxdSA8PCAyOyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBKU0Z1bmN0aW9uLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ4QXJyYXkg
ICAgICAgICAgPSAxdSA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9yIG9u
ZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50
MTZBcnJheSAgICAgICAgID0gMXUgPDwgNDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDE2QXJy
YXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNJbnQzMkFycmF5ICAgICAgICAgPSAxdSA8PCA1OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
SW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY1VpbnQ4QXJyYXkgICAgICAgICA9IDF1IDw8IDY7IC8vIEl0J3MgZGVmaW5p
dGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXUgPDwgNzsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIFVpbnQ4Q2xhbXBlZEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nl
cy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDE2QXJyYXkgICAgICAgID0g
MXUgPDwgODsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXJyYXkg
ICAgICAgID0gMXUgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5IG9yIG9u
ZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxv
YXQzMkFycmF5ICAgICAgID0gMXUgPDwgMTA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Zsb2F0NjRBcnJheSAgICAgICA9IDF1IDw8IDExOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNGaW5hbE9iamVjdCAgICAgICAgPSAxdWxsIDw8IDA7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEpTRmluYWxPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0FycmF5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNBcnJheS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAg
ICAgID0gMXVsbCA8PCAyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0Z1bmN0aW9uLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ4QXJyYXkgICAgICAgICAgPSAxdWxsIDw8IDM7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ4QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQxNkFycmF5ICAgICAgICAgPSAx
dWxsIDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAg
ICAgICAgID0gMXVsbCA8PCA1OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzJBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Vp
bnQ4QXJyYXkgICAgICAgICA9IDF1bGwgPDwgNjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQ4
QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNVaW50OENsYW1wZWRBcnJheSAgPSAxdWxsIDw8IDc7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1bGwgPDwgODsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nl
cy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXJyYXkgICAgICAgID0g
MXVsbCA8PCA5OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDMyQXJyYXkgb3Igb25lIG9mIGl0
cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDMyQXJy
YXkgICAgICAgPSAxdWxsIDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkg
b3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdWxsIDw8IDExOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
VWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50OEFycmF5IHwgU3BlY0lu
dDE2QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5IHwgU3BlY1VpbnQ4Q2xh
bXBlZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFycmF5IHwgU3BlY0Zsb2F0
MzJBcnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0RpcmVjdEFyZ3VtZW50cyAgICA9IDF1IDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBE
aXJlY3RBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
Y29wZWRBcmd1bWVudHMgICAgPSAxdSA8PCAxMzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU2NvcGVk
QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5n
T2JqZWN0ICAgICAgID0gMXUgPDwgMTQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVj
dC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjUmVnRXhwT2JqZWN0ICAgICAgID0g
MXUgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5vdCBhbnkg
c3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjT2JqZWN0T3RoZXIgICAgICAgID0gMXUgPDwgMTY7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBv
YmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBTcGVjRmlu
YWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcg
fCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdP
YmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3BlY09iamVjdE90aGVyOyAvLyBCaXRtYXNrIHVz
ZWQgZm9yIHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgotc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAxdSA8PCAxNzsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIGFuIGlkZW50aWZpZXIuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ1ZhciAgICAgICAgICA9IDF1IDw8
IDE4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFuIGlkZW50
aWZpZXIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RpcmVjdEFyZ3VtZW50cyAg
ICA9IDF1bGwgPDwgMTI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVjdEFyZ3VtZW50cyBvYmpl
Y3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3BlZEFyZ3VtZW50cyAgICA9
IDF1bGwgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3Qu
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1
bGwgPDwgMTQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVjdC4KK3N0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjUmVnRXhwT2JqZWN0ICAgICAgID0gMXVsbCA8PCAxNTsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgUmVnRXhwT2JqZWN0IChhbmQgbm90IGFueSBzdWJjbGFzcyBvZiBS
ZWdFeHBPYmplY3QpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNYXBPYmplY3Qg
ICAgICAgICAgPSAxdWxsIDw8IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgTWFwIG9iamVjdCAoY2Fu
IGl0IGJlIGEgc3ViY2xhc3M/IEZJWE1FKS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjU2V0T2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNzsgLy8gSXQncyBkZWZpbml0ZWx5IHMg
U2V0IG9iamVjdCAoY2FuIGl0IGJlIGEgc3ViY2xhc3M/IEZJWE1FKS4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMXVsbCA8PCAxODsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJyYXksIG9y
IEpTRnVuY3Rpb24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdCAgICAg
ICAgICAgICA9IFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNGdW5jdGlvbiB8IFNw
ZWNUeXBlZEFycmF5VmlldyB8IFNwZWNEaXJlY3RBcmd1bWVudHMgfCBTcGVjU2NvcGVkQXJndW1l
bnRzIHwgU3BlY1N0cmluZ09iamVjdCB8IFNwZWNSZWdFeHBPYmplY3QgfCBTcGVjTWFwT2JqZWN0
IHwgU3BlY1NldE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2VkIGZvciB0
ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlvbi4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0gMXVsbCA8PCAxOTsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIGFuIGlkZW50aWZpZXIuCitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ1ZhciAgICAgICAgICA9IDF1bGwgPDwgMjA7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBub3QgYW4gaWRlbnRpZmll
ci4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nICAgICAgICAgICAgID0g
U3BlY1N0cmluZ0lkZW50IHwgU3BlY1N0cmluZ1ZhcjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNT
dHJpbmcuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAg
ICA9IDF1IDw8IDE5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTeW1ib2wuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0NlbGxPdGhlciAgICAgICAgICA9IDF1IDw8IDIwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYSBKU0NlbGwgYnV0IG5vdCBhIHN1YmNsYXNzIG9mIEpTT2JqZWN0IGFuZCBk
ZWZpbml0ZWx5IG5vdCBhIEpTU3RyaW5nIG9yIGEgU3ltYm9sLiBGSVhNRTogVGhpcyBzaG91bGRu
J3QgYmUgcGFydCBvZiBoZWFwLXRvcCBvciBieXRlY29kZS10b3AuIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNzgKK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjU3ltYm9sICAgICAgICAgICAgID0gMXVsbCA8PCAyMTsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgU3ltYm9sLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAg
ICAgICAgPSAxdWxsIDw8IDIyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0NlbGwgYnV0IG5vdCBh
IHN1YmNsYXNzIG9mIEpTT2JqZWN0IGFuZCBkZWZpbml0ZWx5IG5vdCBhIEpTU3RyaW5nIG9yIGEg
U3ltYm9sLiBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgcGFydCBvZiBoZWFwLXRvcCBvciBieXRl
Y29kZS10b3AuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNzgK
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbCAgICAgICAgICAgICAgID0gU3Bl
Y09iamVjdCB8IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0NlbGxPdGhlcjsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgSlNDZWxsLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNC
b29sSW50MzIgICAgICAgICAgPSAxdSA8PCAyMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMy
IHdpdGggdmFsdWUgMCBvciAxLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25C
b29sSW50MzIgICAgICAgPSAxdSA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyIHdp
dGggdmFsdWUgb3RoZXIgdGhhbiAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0Jvb2xJbnQzMiAgICAgICAgICA9IDF1bGwgPDwgMjM7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjTm9uQm9vbEludDMyICAgICAgID0gMXVsbCA8PCAyNDsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IEludDMyIHdpdGggdmFsdWUgb3RoZXIgdGhhbiAwIG9yIDEuCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0ludDMyT25seSAgICAgICAgICA9IFNwZWNCb29sSW50MzIgfCBTcGVjTm9u
Qm9vbEludDMyOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIuCi1zdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0ludDUyT25seSAgICAgICAgICA9IDF1IDw8IDIzOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gSW50NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4gSXQncyBhbHNv
IGRlZmluaXRlbHkgbm90IGFuIEludDMyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdWxsIDw8IDI1OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
SW50NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4gSXQncyBhbHNvIGRlZmluaXRlbHkg
bm90IGFuIEludDMyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJbnQgICAg
ICAgICAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0ludDUyT25seTsgLy8gSXQncyBzb21ldGhp
bmcgdGhhdCB3ZSBjYW4gZG8gbWFjaGluZSBpbnQgYXJpdGhtZXRpYyBvbi4KLXN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjQW55SW50QXNEb3VibGUgICAgID0gMXUgPDwgMjQ7IC8vIEl0
J3MgZGVmaW5pdGVseSBhbiBJbnQ1MiBhbmQgaXQncyBpbnNpZGUgYSBkb3VibGUuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkludEFzRG91YmxlICAgICA9IDF1IDw8IDI1OyAv
LyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5k
IGl0J3MgYSBkb3VibGUuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFz
RG91YmxlICAgICA9IDF1bGwgPDwgMjY7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ1MiBhbmQg
aXQncyBpbnNpZGUgYSBkb3VibGUuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05v
bkludEFzRG91YmxlICAgICA9IDF1bGwgPDwgMjc7IC8vIEl0J3MgZGVmaW5pdGVseSBub3QgYW4g
SW50NTIgYnV0IGl0J3MgYSByZWFsIG51bWJlciBhbmQgaXQncyBhIGRvdWJsZS4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlUmVhbCAgICAgICAgID0gU3BlY05vbkludEFz
RG91YmxlIHwgU3BlY0FueUludEFzRG91YmxlOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBub24tTmFO
IGRvdWJsZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlUHVyZU5hTiAg
ICAgID0gMXUgPDwgMjY7IC8vIEl0J3MgZGVmaW5pdGVseSBhIE5hTiB0aGF0IGlzIHNhZSB0byB0
YWcgKGkuZS4gcHVyZSkuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZUlt
cHVyZU5hTiAgICA9IDF1IDw8IDI3OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1
bnNhZmUgdG8gdGFnIChpLmUuIGltcHVyZSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1bGwgPDwgMjg7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IE5hTiB0aGF0IGlzIHNhZSB0byB0YWcgKGkuZS4gcHVyZSkuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0RvdWJsZUltcHVyZU5hTiAgICA9IDF1bGwgPDwgMjk7IC8vIEl0J3MgZGVm
aW5pdGVseSBhIE5hTiB0aGF0IGlzIHVuc2FmZSB0byB0YWcgKGkuZS4gaW1wdXJlKS4KIHN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlTmFOICAgICAgICAgID0gU3BlY0RvdWJs
ZVB1cmVOYU4gfCBTcGVjRG91YmxlSW1wdXJlTmFOOyAvLyBJdCdzIGRlZmluaXRlbHkgc29tZSBr
aW5kIG9mIE5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVEb3Vi
bGUgICAgID0gU3BlY0RvdWJsZVJlYWwgfCBTcGVjRG91YmxlUHVyZU5hTjsgLy8gSXQncyBlaXRo
ZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZSwgYnV0IGl0J3MgZGVmaW5pdGVseSBub3QgaW1w
dXJlIE5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbERvdWJsZSAgICAg
ICAgID0gU3BlY0RvdWJsZVJlYWwgfCBTcGVjRG91YmxlTmFOOyAvLyBJdCdzIGVpdGhlciBhIG5v
bi1OYU4gb3IgYSBOYU4gZG91YmxlLgpAQCAtODEsMTIgKzgzLDEyIEBAIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGUKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjRnVsbFJlYWxOdW1iZXIgICAgID0gU3BlY0FueUludCB8IFNwZWNEb3VibGVSZWFsOyAvLyBJ
dCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZVJlYWwsIG9yIGEgSW50NTIuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlTnVtYmVyICAgICA9IFNwZWNJbnQzMk9u
bHkgfCBTcGVjQnl0ZWNvZGVEb3VibGU7IC8vIEl0J3MgZWl0aGVyIGFuIEludDMyIG9yIGEgRG91
YmxlLCBhbmQgdGhlIERvdWJsZSBjYW5ub3QgYmUgYW4gaW1wdXJlIE5hTi4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbE51bWJlciAgICAgICAgID0gU3BlY0FueUludCB8IFNw
ZWNGdWxsRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiwgSW50NTIsIG9yIGEgRG91Ymxl
LCBhbmQgdGhlIERvdWJsZSBjYW4gYmUgaW1wdXJlIE5hTi4KLXN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXUgPDwgMjg7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIEJvb2xlYW4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAg
ICAgICAgICAgICA9IDF1IDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3Ig
VW5kZWZpbmVkLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sZWFuICAgICAg
ICAgICAgPSAxdWxsIDw8IDMwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdWxsIDw8IDMx
OyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVkLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNaXNjICAgICAgICAgICAgICAgPSBTcGVjQm9vbGVhbiB8
IFNwZWNPdGhlcjsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBhIGJvb2xlYW4sIE51bGwsIG9y
IFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcFRvcCAgICAg
ICAgICAgID0gU3BlY0NlbGwgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjTWlzYzsgLy8gSXQg
Y2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3BlY0ludDUyT25seSBhbmQgU3Bl
Y0RvdWJsZUltcHVyZU5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjUHJpbWl0
aXZlICAgICAgICAgID0gU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQnl0ZWNvZGVOdW1i
ZXIgfCBTcGVjTWlzYzsgLy8gSXQncyBhbnkgbm9uLU9iamVjdCBKU1ZhbHVlLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAgPSAxdSA8PCAzMDsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXVsbCA8PCAzMjsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQnl0ZWNvZGVUb3AgICAgICAgID0gU3BlY0hlYXBUb3AgfCBTcGVjRW1wdHk7IC8v
IEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9ubHkgYW5k
IFNwZWNEb3VibGVJbXB1cmVOYU4uIENvcnJlc3BvbmRzIHRvIHdoYXQgY291bGQgYmUgZm91bmQg
aW4gYSBieXRlY29kZSBsb2NhbC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVs
bFRvcCAgICAgICAgICAgID0gU3BlY0J5dGVjb2RlVG9wIHwgU3BlY0Z1bGxOdW1iZXI7IC8vIEl0
IGNhbiBiZSBhbnl0aGluZyB0aGF0IGJ5dGVjb2RlIGNvdWxkIHNlZSBwbHVzIGV4b3RpYyBlbmNv
ZGluZ3Mgb2YgbnVtYmVycy4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMjA1
MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNiArOTc3LDIwIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisg
ICAgY2FzZSBKU01hcEhhc2g6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50
MzJPbmx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0Ogor
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dy
YXBoLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJc05vbkVtcHR5
SlNNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworCisKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc0pTQXJy
YXk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKQEAgLTk4Nyw2ICsxMDAxLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgSXNPYmplY3RPck51bGw6
CiAgICAgY2FzZSBJc0Z1bmN0aW9uOgogICAgIGNhc2UgSXNSZWdFeHBPYmplY3Q6CisgICAgY2Fz
ZSBJc0pTTWFwOgogICAgIGNhc2UgSXNUeXBlZEFycmF5VmlldzogewogICAgICAgICBBYnN0cmFj
dFZhbHVlIGNoaWxkID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmIChjaGls
ZC52YWx1ZSgpKSB7CkBAIC05OTUsNiArMTAxMCw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52YWx1ZSgpLmlzT2JqZWN0
KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09IEFycmF5VHlwZSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJc0pTTWFwOgorICAgICAg
ICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzQm9vbGVhbihjaGlsZC52YWx1ZSgpLmlzT2Jq
ZWN0KCkgJiYgY2hpbGQudmFsdWUoKS5nZXRPYmplY3QoKS0+dHlwZSgpID09IEpTTWFwVHlwZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoK
ICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Jvb2xlYW4oCiAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkLnZhbHVlKCkuaXNDZWxsKCkKQEAgLTEyMzYsNiArMTI1NCw5IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogCisgICAgICAgIGNhc2UgSXNKU01hcDoKKyAgICAgICAgICAgIGJy
ZWFrOworCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMjg4Myw3ICsyOTA0LDYgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+
CiBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVu
c2lnbmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygp
LT5hdChpbmRleEluQmxvY2spOwotICAgIAogICAgIHN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgZXhl
Y3V0ZUVkZ2VzKG5vZGUpOwogICAgIHJldHVybiBleGVjdXRlRWZmZWN0cyhpbmRleEluQmxvY2ss
IG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTM4LDYgKzI1Mzgs
NDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbAogICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgZ2V0KG9wZXJhbmQpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzog
eworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9k
ZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChKU01h
cEhhc2gsIGtleSk7CisgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGFkZFRvR3JhcGgoR2V0SlNNYXBC
dWNrZXQsIE9wSW5mbygwKSwgbWFwLCBrZXksIGhhc2gpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBhZGRUb0dyYXBoKExvYWRGcm9tSlNNYXBCdWNrZXQsIG1hcCwgYnVja2V0KTsKKyAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBKU01hcEhhc0ludHJpbnNpYzogeworICAgICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwID0g
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAg
ICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rl
ck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChKU01hcEhhc2gsIGtl
eSk7CisgICAgICAgIE5vZGUqIGJ1Y2tldCA9IGFkZFRvR3JhcGgoR2V0SlNNYXBCdWNrZXQsIE9w
SW5mbygwKSwgbWFwLCBrZXksIGhhc2gpOworICAgICAgICBOb2RlKiByZXN1bHQgPSBhZGRUb0dy
YXBoKElzTm9uRW1wdHlKU01hcEJ1Y2tldCwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgY2FzZSBKU1NldEhhc0ludHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSoganNTZXQgPSBnZXQodmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSog
a2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KSk7
CisgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKEpTTWFwSGFzaCwga2V5KTsKKyAgICAg
ICAgTm9kZSogYnVja2V0ID0gYWRkVG9HcmFwaChHZXRKU01hcEJ1Y2tldCwgT3BJbmZvKDEpLCBq
c1NldCwga2V5LCBoYXNoKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChJc05v
bkVtcHR5SlNNYXBCdWNrZXQsIGJ1Y2tldCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAg
ICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNTEzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjAsNiArMTYwLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgogICAgIGNhc2UgQ29tcGFyZUVxUHRyOgog
ICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgSXNKU01hcDoKICAgICBjYXNlIElzRW1wdHk6
CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTEyNDMsNiAr
MTI0NCwyOCBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBMb2dTaGFkb3dDaGlja2VuVGFpbDoKICAgICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAg
ICAgICAgcmV0dXJuOworCisgICAgY2FzZSBKU01hcEhhc2g6CisgICAgICAgIGRlZihQdXJlVmFs
dWUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDogewor
ICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBFZGdlJiBtYXBFZGdlID0gbm9kZS0+
Y2hpbGQxKCk7CisgICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBub2RlLT5jaGlsZDIoKTsKKyAgICAg
ICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEJ1Y2tldEluZGV4TG9jLCBNaXNjRmllbGRzLCBtYXBF
ZGdlLCBrZXlFZGdlKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICByZWFkKE1pc2NGaWVsZHMp
OworICAgICAgICBFZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIEVkZ2Um
IGJ1Y2tldEVkZ2UgPSBub2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihK
U01hcEdldExvYywgTWlzY0ZpZWxkcywgbWFwRWRnZSwgYnVja2V0RWRnZSksIExhenlOb2RlKG5v
ZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1
Y2tldDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihKU01hcEhhc0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2Rl
KSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsx
NTcsNyBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBJ
bnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICBjYXNlIElzSlNBcnJh
eToKKyAgICBjYXNlIElzSlNNYXA6CiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNVbmRl
ZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46CkBAIC0xODUsNiArMTg2LDEwIEBAIGJvb2wgZG9l
c0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAg
ICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToK
KyAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgIGNhc2Ug
TG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKICAg
ICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAg
Y2FzZSBDaGVja1RpZXJVcEluTG9vcDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRWRnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRn
ZS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vk
Z2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAgICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBz
dGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJldHVybiA3OyB9CisgICAgc3RhdGljIHVpbnQzMl90
IHNoaWZ0KCkgeyByZXR1cm4gODsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdv
cmQoTm9kZSogbm9kZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cywg
S2lsbFN0YXR1cyBraWxsU3RhdHVzKQogICAgIHsKQEAgLTE5Nyw4ICsxOTcsMjEgQEAgcHJpdmF0
ZToKICAgICAgICAgdWludHB0cl90IHNoaWZ0ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG5vZGUpIDw8IHNoaWZ0KCk7CiAgICAgICAgIEFTU0VSVCgoc2hpZnRlZFZhbHVlID4+IHNo
aWZ0KCkpID09IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpKTsKICAgICAgICAgQVNTRVJU
KHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwotICAgICAgICBBU1NFUlQo
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KDIpIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1
ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tp
bGwoa2lsbFN0YXR1cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92
ZWQocHJvb2ZTdGF0dXMpKTsKKyAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KExhc3RVc2VLaW5kKSA8PCAyKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlm
dCgpKSk7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBzaGlmdGVkVmFsdWUgfCAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0
dXMpIDw8IDEpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihERkc6OmlzUHJvdmVkKHByb29mU3Rh
dHVzKSk7CisgICAgICAgIHVuaW9uIEZvbyB7CisgICAgICAgICAgICBGb28oKSB7IHdvcmQgPSAw
OyB9CisgICAgICAgICAgICB1aW50cHRyX3Qgd29yZDsKKyAgICAgICAgICAgIEVkZ2UgZWRnZTsK
KyAgICAgICAgfSB1OworICAgICAgICB1LndvcmQgPSByZXN1bHQ7CisgICAgICAgIEVkZ2UgcmVz
dWx0RWRnZSA9IHUuZWRnZTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJlc3VsdEVkZ2UpOworICAg
ICAgICBBU1NFUlQocmVzdWx0RWRnZS51c2VLaW5kVW5jaGVja2VkKCkgPT0gdXNlS2luZCk7Cisg
ICAgICAgIEFTU0VSVChyZXN1bHRFZGdlLm5vZGUoKSA9PSBub2RlKTsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdEVkZ2UucHJvb2ZTdGF0dXNVbmNoZWNrZWQoKSA9PSBwcm9vZlN0YXR1cyk7CisgICAg
ICAgIEFTU0VSVChyZXN1bHRFZGdlLmtpbGxTdGF0dXNVbmNoZWNrZWQoKSA9PSBraWxsU3RhdHVz
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAjZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTQ1LDYgKzE1NDUsMzAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBJc0pTTWFwOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkKKyAgICAgICAgICAgICAg
ICBmaXhFZGdlPENlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FzZSBHZXRKU01hcEJ1Y2tldDoKKyAgICAgICAgICAgIGlm
IChub2RlLT5pc1NldCgpKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8U2V0T2JqZWN0VXNlPihu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZml4RWRn
ZTxNYXBPYmplY3RVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50
eXBlZFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2Fk
RnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAgZml4RWRnZTxNYXBPYmplY3RVc2U+KG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElzTm9uRW1wdHlKU01h
cEJ1Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAg
Ly8gSGF2ZSB0aGVzZSBuby1vcCBjYXNlcyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3Jn
ZXRzIHRvIGFkZCBoYW5kbGVycyBmb3IgbmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJn
dW1lbnQ6CkBAIC0xNjE2LDYgKzE2NDAsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dEJ5
VmFsV2l0aFRoaXM6CiAgICAgICAgIGNhc2UgR2V0QnlWYWxXaXRoVGhpczoKICAgICAgICAgY2Fz
ZSBDb21wYXJlRXFQdHI6CisgICAgICAgIGNhc2UgSlNNYXBIYXNoOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkocmV2aXNpb24gMjA1MTM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDMsNiArMTQzLDE1IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBMb2MKICAgICBjYXNlIFJlZ0V4cE9iamVjdExhc3RJbmRleExvYzoKICAgICAgICAg
b3V0LnByaW50KCJSZWdFeHBPYmplY3RMYXN0SW5kZXhMb2MiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSlNNYXBCdWNrZXRJbmRleExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcEJ1
Y2tldEluZGV4TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTTWFwR2V0TG9jOgor
ICAgICAgICBvdXQucHJpbnQoIkpTTWFwR2V0TG9jIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEpTTWFwSGFzTG9jOgorICAgICAgICBvdXQucHJpbnQoIkpTTWFwSGFzTG9jIik7CisgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAko
cmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsMTAgQEAgZW51bSBMb2NhdGlvbktp
bmQgewogICAgIFN0cnVjdHVyZUxvYywKICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNldExvYywKICAg
ICBTdGFja0xvYywKLSAgICBTdGFja1BheWxvYWRMb2MKKyAgICBTdGFja1BheWxvYWRMb2MsCisg
ICAgSlNNYXBCdWNrZXRJbmRleExvYywKKyAgICBKU01hcEdldExvYywKKyAgICBKU01hcEhhc0xv
YwogfTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjMwMiw2ICsyMzAyLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIG1fb3BJbmZvLmFzPHVuc2lnbmVkPigpOwogICAgIH0KIAorICAgIGJv
b2wgaXNTZXQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gR2V0SlNNYXBC
dWNrZXQpOworICAgICAgICByZXR1cm4gISFtX29wSW5mby5hczx1aW50MzJfdD4oKTsKKyAgICB9
CisKICAgICB2b2lkIGR1bXBDaGlsZHJlbihQcmludFN0cmVhbSYgb3V0KQogICAgIHsKICAgICAg
ICAgaWYgKCFjaGlsZDEoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzA5LDYgKzMwOSw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhJbnN0YW5jZU9mQ3VzdG9tLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBcCiAgICAgbWFjcm8oSXNKU0Fy
cmF5LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAorICAgIG1hY3JvKElzSlNNYXAsIE5vZGVSZXN1bHRC
b29sZWFuKSBcCiAgICAgbWFjcm8oSXNFbXB0eSwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBt
YWNybyhJc1VuZGVmaW5lZCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKICAgICBtYWNybyhJc0Jvb2xl
YW4sIE5vZGVSZXN1bHRCb29sZWFuKSBcCkBAIC0zODgsNyArMzg5LDEyIEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9y
U3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBt
YWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJl
c3VsdEpTKSBcCi0gICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKQorICAgIG1h
Y3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAgIC8qIEhhc2hpbmcgZm9yIEpT
TWFwICovIFwKKyAgICBtYWNybyhKU01hcEhhc2gsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1h
Y3JvKEdldEpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhMb2FkRnJvbUpT
TWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhJc05vbkVtcHR5SlNNYXBCdWNr
ZXQsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25v
dG9uaWNhbGx5IGluY3JlYXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVz
ZWQgYnkgdGhlIHN1YnNlcXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2Vk
IHZpYSB0aGUgTm9kZUlkTWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDgg
QEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVu
dC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJP
YmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTY29w
ZWRBcmd1bWVudHMuaCIKQEAgLTE3OTEsNiArMTc5MywzNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0RHluYW1pY1ZhCiAgICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29w
ZSwgZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIHNsb3QpOwogfQogCitpbnQz
Ml90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgaW5wdXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBpbnQzMl90IHJlc3Vs
dCA9IGpzTWFwSGFzaChleGVjLCBub3JtYWxpemVNYXBLZXkoSlNWYWx1ZTo6ZGVjb2RlKGlucHV0
KSkpOworICAgIGlmICh2bS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmlu
ZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXkp
Cit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nh
c3Q8SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpKTsK
KyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpi
dWNrZXQ7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNr
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5KQorewor
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNl
cigmdm0sIGV4ZWMpOworICAgIEpTU2V0OjpCdWNrZXRUeXBlKiogYnVja2V0ID0ganNDYXN0PEpT
U2V0Kj4obWFwKS0+ZmluZEJ1Y2tldChleGVjLCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSk7CisgICAg
aWYgKCFidWNrZXQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiAqYnVja2V0
OworfQorCiBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRp
b25Ob3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KQogewogICAgIC8v
IEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4g
QW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miwx
MCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiBTdHJpbmdJbXBs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5n
Kik7CiBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJp
bmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRp
b25KU01hcEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOworSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNTZXRG
aW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKKwogSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqLCBKU1N0
cmluZyosIFN0cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3Ry
aW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzQxLDYgKzc0MSwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRnJv
bUpTTWFwQnVja2V0OgorICAgICAgICAgICAgLy8gRklYTUU6IHVzZSB0aGUgY2FsbHMgdmFsdWUg
cHJvZmlsZXIgaGVyZS4KKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2RlVG9w
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAg
ICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgR2V0
UmVzdExlbmd0aDogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzg0LDYgKzc5OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgY2FzZSBJbnN0YW5jZU9mQ3VzdG9tOgogICAgICAg
ICBjYXNlIElzSlNBcnJheToKKyAgICAgICAgY2FzZSBJc0pTTWFwOgogICAgICAgICBjYXNlIElz
RW1wdHk6CiAgICAgICAgIGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgICAgIGNhc2UgSXNCb29sZWFu
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoKICAgICAg
ICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToKICAgICAg
ICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAg
ICAgICBjYXNlIFNldE9iamVjdFVzZToKICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgog
ICAgICAgICBjYXNlIFN0cmluZ0lkZW50VXNlOgogICAgICAgICBjYXNlIFN0cmluZ1VzZToKQEAg
LTI1OCw2ICsyNjAsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0
CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgIGNhc2UgSW5zdGFuY2VPZkN1c3RvbToKICAgICBj
YXNlIElzSlNBcnJheToKKyAgICBjYXNlIElzSlNNYXA6CiAgICAgY2FzZSBJc0VtcHR5OgogICAg
IGNhc2UgSXNVbmRlZmluZWQ6CiAgICAgY2FzZSBJc0Jvb2xlYW46CkBAIC0zNTUsNiArMzU4LDEw
IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdl
dER5bmFtaWNWYXI6CiAgICAgY2FzZSBQdXREeW5hbWljVmFyOgogICAgIGNhc2UgUmVzb2x2ZVNj
b3BlOgorICAgIGNhc2UgSlNNYXBIYXNoOgorICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAg
Y2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQm90dG9tVmFsdWU6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29yZC5oIgogI2luY2x1
ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRl
ICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgpAQCAtNDcsNiArNDgsOCBAQAogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAKKyNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCIKKwogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKQEAgLTQ2MTUsNiArNDYxOCwxNDAgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIElzSlNNYXA6IHsKKyAgICAgICAgY29tcGlsZUlzSlNNYXAobm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSlNNYXBIYXNoOiB7CisgICAgICAg
IGNvbXBpbGVKU01hcEhhc2gobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IEdldEpTTWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMsIG5v
ZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IG1hc2sodGhpcyk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1ZmZlcih0
aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1Y2tldCh0aGlzKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3By
KCk7CisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBt
YXNrR1BSID0gbWFzay5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3By
KCk7CisgICAgICAgIEdQUlJlZyBidWZmZXJHUFIgPSBidWZmZXIuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBrZXlHUFIgPSBr
ZXkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAg
ICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAg
ICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisg
ICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1h
cEdQUiwgT0JKRUNUX09GRlNFVE9GKEpTTWFwLCBtX21hcCkpLCBidWZmZXJHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBPQkpFQ1Rf
T0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+
LCBtX2NhcGFjaXR5KSksIG1hc2tHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsPEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiwgbV9idWZmZXIpKSwgYnVmZmVyR1BS
KTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXNrR1BSKTsKKyAgICAg
ICAgbV9qaXQubW92ZShoYXNoR1BSLCBpbmRleEdQUik7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QgZG9uZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRo
Q2FzZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBsb29wQXJvdW5kOworCisg
ICAgICAgIG1faml0LmFuZDMyKG1hc2tHUFIsIGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJ1ZmZlckdQUiwgaW5kZXhHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgYnVja2V0R1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShi
dWNrZXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gbm90UHJlc2VudEluVGFibGUgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIGJ1Y2tl
dEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5Pj46OmVtcHR5VmFsdWUoKSkpOworICAgICAgICBsb29wQXJvdW5kLmFwcGVuZCht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAgICAgIGJ1Y2tl
dEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5Pj46OmRlbGV0ZWRWYWx1ZSgpKSkpOworCisgICAgICAgIG1faml0LmxvYWQ2NChN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+OjpvZmZzZXRPZktleSgpKSwgYnVja2V0R1BSKTsKKworICAgICAgICAvLyBQ
ZXJmb3JtIE9iamVjdC5pcygpCisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaDY0KE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIpKTsgLy8gVGhleSdyZSBkZWZp
bml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVja2V0IHdlIHdlcmUgbG9va2lu
ZyBmb3IhCisgICAgICAgIGF1dG8gb25lSXNudENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwo
SlNWYWx1ZVJlZ3MoYnVja2V0R1BSKSk7CisgICAgICAgIC8vIGZpcnN0IGlzIGEgY2VsbCBoZXJl
LgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1
ZVJlZ3Moa2V5R1BSKSkpOworICAgICAgICAvLyBCb3RoIGFyZSBjZWxscyBoZXJlLgorICAgICAg
ICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSlNDZWxsOjp0eXBl
SW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAv
LyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgICAgICBKSVRDb21w
aWxlcjo6QWRkcmVzcyhrZXlHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhlIGZpcnN0IGlzIGEgc3RyaW5n
LCBidXQgdGhlIHNlY29uZCBpcyBub3QsIHdlIGNvbnRpbnVlIHRvIGxvb3AgYXJvdW5kLgorICAg
ICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG9uZUlzbnRD
ZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBkb25lIGEgNjQtYml0
IGNvbXBhcmUgYXQgdGhpcyBwb2ludCwgc28gaWYgb25lIGlzIG5vdCBhIG51bWJlciwgdGhleSdy
ZSBkZWZpbml0ZWx5IG5vdCBlcXVhbC4KKyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQu
YnJhbmNoSWZOb3ROdW1iZXIoYnVja2V0R1BSKSk7CisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5k
KG1faml0LmJyYW5jaElmTm90TnVtYmVyKGtleUdQUikpOworICAgICAgICAvLyBCb3RoIGFyZSBk
ZWZpbml0ZWx5IG51bWJlcnMuIElmIHdlIHNlZSBhIGRvdWJsZSwgd2UgZ28gdG8gdGhlIHNsb3cg
cGF0aC4KKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RJbnQz
MihidWNrZXRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RJbnQzMihrZXlHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGxvb3BBcm91bmQubGluaygm
bV9qaXQpOworICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIGluZGV4R1BSKTsK
KyAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworCisgICAgICAgIHNs
b3dQYXRoQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhpbmRleEdQUik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSd2ZSBhbHJlYWR5IGhhc2hlZCwgbGV0
cyBqdXN0IHBhc3MgaW4gYWxsIHRoZSBzdGF0ZSB0byB0aGUgZmluZEJ1Y2tldCBmdW5jdGlvbi4K
KyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisg
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0
R1BSLCBtYXBHUFIsIGtleUdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BS
KTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7
CisKKyAgICAgICAgbm90UHJlc2VudEluVGFibGUubGluaygmbV9qaXQpOworICAgICAgICBtX2pp
dC5tb3ZlKFRydXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUu
bGluaygmbV9qaXQpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAg
ICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgZWRnZS4KKyAgICAgICAgLy9TcGVjdWxhdGVDZWxs
T3BlcmFuZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIC8vR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdEJ1Y2tldCA9IG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQUik7CisgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFsdWUoKSksIHJl
c3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBu
b3RCdWNrZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVt
cHR5SlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYnVja2V0KHRo
aXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1faml0LmNvbXBhcmVQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRHUFIsIFRydXN0ZWRJbW0zMigwKSwgcmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSksIHJl
c3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBJc09iamVj
dDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShy
ZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxMyw2ICszNjEzLDk1IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTQXJyYXkoTm8KICAgICBibGVzc2VkQm9vbGVhblJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNK
U01hcChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVChub2RlLT5vcCgpID09IElzSlNNYXApOwor
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkgeworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbV9qaXQuY29tcGFyZTgoSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAg
SklUQ29tcGlsZXI6OkFkZHJlc3ModmFsdWVHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKEpTTWFwVHlwZSksCisgICAgICAgICAgICBy
ZXN1bHRHUFIpOworICAgICAgICBibGVzc0Jvb2xlYW4ocmVzdWx0R1BSKTsKKyAgICAgICAgYmxl
c3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBVbnR5
cGVkVXNlKTsKKyAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7
CisgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgSlNWYWx1ZVJl
Z3MgdmFsdWVSZWdzID0gdmFsdWUuanNWYWx1ZVJlZ3MoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworCisgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOb3RDZWxsID0gbV9q
aXQuYnJhbmNoSWZOb3RDZWxsKHZhbHVlUmVncyk7CisKKyAgICBtX2ppdC5jb21wYXJlOChKSVRD
b21waWxlcjo6RXF1YWwsCisgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKHZhbHVlUmVncy5w
YXlsb2FkR1BSKCksIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLAorICAgICAgICBUcnVz
dGVkSW1tMzIoSlNNYXBUeXBlKSwKKyAgICAgICAgcmVzdWx0R1BSKTsKKyAgICBibGVzc0Jvb2xl
YW4ocmVzdWx0R1BSKTsKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OworCisgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBtb3ZlRmFsc2VUbyhyZXN1bHRH
UFIpOworCisgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUpTTWFw
SGFzaChOb2RlKiBub2RlKQoreworICAgIC8vIEZJWE1FOiB3ZSBhcmUgY3VycmVudGx5IHNsb3dl
ciBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIHRvIGNhbGwgaW50byBDIHRvIGhhc2ggdGhlIHN0
cmluZy4KKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBhIHN0cmluZyBhcmd1bWVudCBmYXN0IHBhdGgg
dGhhdCBhdm9pZHMgY2hlY2tzIQorCisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSlNNYXBIYXNo
KTsKKworICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OworCisgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc3RyYWlnaHRIYXNoOworICAgIGF1dG8gaXNO
b3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5i
cmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
aW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3Ry
aW5nVHlwZSkpKTsKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGlu
cHV0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVz
dWx0R1BSKSk7CisgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgbV9qaXQu
dXJzaGlmdDY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIHJlc3VsdEdQUik7Cisg
ICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgcmVzdWx0R1BSKSk7CisgICAgYXV0byBkb25lMiA9IG1faml0Lmp1bXAoKTsKKworICAgIGlz
Tm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFu
Y2hJZk5vdE51bWJlcihpbnB1dEdQUikpOworICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQu
YnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhpbnB1dEdQUikpKTsKKyAgICBzbG93UGF0aC5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKworICAgIHN0cmFpZ2h0SGFzaC5saW5rKCZtX2ppdCk7CisgICAg
bV9qaXQubW92ZShpbnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC5qc01hcEhhc2gocmVz
dWx0R1BSLCB0ZW1wR1BSKTsKKyAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisKKyAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0
R1BSKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwSGFzaCwgcmVzdWx0R1BSLCBp
bnB1dEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIG1f
aml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBkb25lMi5saW5rKCZtX2ppdCk7CisgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwog
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqIG5vZGUpCiB7
CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNzM4
MSw2ICs3NDcwLDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVJlZ0V4cE9iamUK
ICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7CiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIEdQUlJlZyBj
ZWxsKQoreworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNwZWNNYXBPYmplY3Qs
IEpTTWFwVHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVj
dChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjTWFwT2Jq
ZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIo
KSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVk
Z2UsIEdQUlJlZyBjZWxsKQoreworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNw
ZWNTZXRPYmplY3QsIEpTU2V0VHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjU2V0T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwg
b3BlcmFuZC5ncHIoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcikpCkBAIC03NjY4LDYgKzc3ODUsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgog
ICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVT
ZXRPYmplY3QoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVz
ZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDE0ICs5MywxNCBAQCBwcml2YXRlOgog
ICAgIC8vIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBl
bnVtIFNwaWxsT3JkZXIgewotICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQgPSAxLCAvLyBubyBz
cGlsbCwgYW5kIGNoZWFwIGZpbGwKLSAgICAgICAgU3BpbGxPcmRlclNwaWxsZWQgID0gMiwgLy8g
bm8gc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckpTICAgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwK
LSAgICAgICAgU3BpbGxPcmRlckNlbGwgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAg
U3BpbGxPcmRlclN0b3JhZ2UgID0gNCwgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRl
ckludGVnZXIgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAotICAgICAgICBTcGlsbE9yZGVy
Qm9vbGVhbiAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Ci0gICAgICAgIFNwaWxsT3JkZXJE
b3VibGUgICA9IDYsIC8vIG5lZWRzIHNwaWxsIGFuZCBjb252ZXJ0CisgICAgICAgIFNwaWxsT3Jk
ZXJDb25zdGFudCAgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKKyAgICAgICAgU3Bp
bGxPcmRlclNwaWxsZWQgICA9IDIsIC8vIG5vIHNwaWxsCisgICAgICAgIFNwaWxsT3JkZXJKUyAg
ICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVyQ2VsbCAgICAgID0g
NCwgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgICA9IDQsIC8vIG5l
ZWRzIHNwaWxsCisgICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICAgPSA1LCAvLyBuZWVkcyBzcGls
bCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJCb29sZWFuICAgPSA1LCAvLyBuZWVkcyBzcGls
bCBhbmQgYm94CisgICAgICAgIFNwaWxsT3JkZXJEb3VibGUgICAgPSA2LCAvLyBuZWVkcyBzcGls
bCBhbmQgY29udmVydAogICAgIH07CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGVudW0g
U3BpbGxPcmRlciB7CkBAIC01MTksNyArNTE5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8g
VGhpcyBpcyBzcGVjaWFsLCBzaW5jZSBpdCdzIG5vdCBhIEpTIHZhbHVlIC0gYXMgaW4gaXQncyBu
b3QgdmlzaWJsZSB0byBKUwogICAgICAgICAgICAgLy8gY29kZS4KICAgICAgICAgICAgIG1faml0
LnN0b3JlUHRyKGluZm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsK
LSAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0U3Rv
cmFnZSk7CisgICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgc3BpbGxG
b3JtYXQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTc1Niw2ICs3NTYs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZkN1c3RvbShOb2RlKik7CiAK
ICAgICB2b2lkIGNvbXBpbGVJc0pTQXJyYXkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUlzSlNN
YXAoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUpTTWFwSGFzaChOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlSXNSZWdFeHBPYmplY3QoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUlzVHlwZWRBcnJh
eVZpZXcoTm9kZSopOwogCkBAIC0xMTk3LDYgKzExOTksMTEgQEAgcHVibGljOgogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKICAgICB9CisgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCisgICAgeworICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAKICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDSVpDIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlZ09wMSwgVW5pcXVlZFN0cmluZ0ltcGwqIGlkZW50T3AyLCBpbnQz
Ml90IG9wMywgR1BSUmVnIHJlZ09wNCkKICAgICB7CkBAIC0xNjcxLDYgKzE2NzgsMTIgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJl
ZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyLCB1bnNpZ25lZCBhcmczKQogICAg
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0
ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFyZzMpKTsKQEAgLTI2NTYsNiArMjY2OSwxMCBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxhdGVGaW5hbE9iamVjdChFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBzcGVj
dWxhdGVSZWdFeHBPYmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRn
ZSk7CisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSwgR1BSUmVnIGNlbGwpOworICAg
IHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2Jq
ZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdE9yT3RoZXIo
RWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCk7
CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJZGVudEFuZExvYWRTdG9yYWdlKEVkZ2UgZWRnZSwg
R1BSUmVnIHN0cmluZywgR1BSUmVnIHN0b3JhZ2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCwx
MiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBS
ZWdFeHBPYmplY3RVc2U6CiAgICAgICAgIG91dC5wcmludCgiUmVnRXhwT2JqZWN0Iik7CiAgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJN
YXBPYmplY3RVc2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgor
ICAgICAgICBvdXQucHJpbnQoIlNldE9iamVjdFVzZSIpOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIi
KTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdV
c2VLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VL
aW5kLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBAIGVudW0gVXNlS2luZCB7
CiAgICAgS25vd25TdHJpbmdVc2UsCiAgICAgS25vd25QcmltaXRpdmVVc2UsIC8vIFRoaXMgYml6
YXJyZSB0eXBlIGFyaXNlcyBmb3Igb3Bfc3RyY2F0LCB3aGljaCBoYXMgYSBieXRlY29kZSBndWFy
YW50ZWUgdGhhdCBpdCB3aWxsIG9ubHkgc2VlIHByaW1pdGl2ZXMgKGkuZS4gbm90IG9iamVjdHMp
LgogICAgIFN5bWJvbFVzZSwKKyAgICBNYXBPYmplY3RVc2UsCisgICAgU2V0T2JqZWN0VXNlLAog
ICAgIFN0cmluZ09iamVjdFVzZSwKICAgICBTdHJpbmdPclN0cmluZ09iamVjdFVzZSwKICAgICBO
b3RTdHJpbmdWYXJVc2UsCkBAIC0xMzQsNiArMTM2LDEwIEBAIGlubGluZSBTcGVjdWxhdGVkVHlw
ZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICAgICAgcmV0dXJuIFNwZWNIZWFwVG9wICYgflNwZWNP
YmplY3Q7CiAgICAgY2FzZSBTeW1ib2xVc2U6CiAgICAgICAgIHJldHVybiBTcGVjU3ltYm9sOwor
ICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICByZXR1cm4gU3BlY01hcE9iamVjdDsKKyAg
ICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNTZXRPYmplY3Q7CiAgICAg
Y2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiBTcGVjU3RyaW5nT2JqZWN0Owog
ICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CkBAIC0yMjEsNiArMjI3LDggQEAgaW5s
aW5lIGJvb2wgaXNDZWxsKFVzZUtpbmQga2luZCkKICAgICBjYXNlIFN5bWJvbFVzZToKICAgICBj
YXNlIFN0cmluZ09iamVjdFVzZToKICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgor
ICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcg
QEAKICNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXAu
aCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTEwMiw3ICsxMDMsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8s
IFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8o
U3RydWN0dXJlX3Byb3RvdHlwZSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXAotICAg
IG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKQorICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNNYXBfSGFzaE1hcEltcGwsIE9CSkVDVF9PRkZT
RVRPRihKU01hcCwgbV9tYXApKSBcCisgICAgbWFjcm8oSGFzaE1hcEltcGxfY2FwYWNpdHksIE9C
SkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5Pj4sIG1fY2FwYWNpdHkpKSBcCisgICAgbWFjcm8oSGFzaE1hcEltcGxfYnVmZmVyLCAgT0JK
RUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXk+PiwgbV9idWZmZXIpKSBcCisgICAgbWFjcm8oSGFzaE1hcEJ1Y2tldF92YWx1ZSwgSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZWYWx1ZSgpKSBcCisg
ICAgbWFjcm8oSGFzaE1hcEJ1Y2tldF9rZXksIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT46Om9mZnNldE9mS2V5KCkpIFwKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVE
X0FCU1RSQUNUX0hFQVAobWFjcm8pIFwKICAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfc3RvcmFn
ZSwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1
ZSkpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgwLDYgKzE4MCwxMSBAQCBpbmxp
bmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBJc0pTQXJyYXk6Cisg
ICAgY2FzZSBJc0pTTWFwOgorICAgIGNhc2UgSlNNYXBIYXNoOgorICAgIGNhc2UgR2V0SlNNYXBC
dWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0
eUpTTWFwQnVja2V0OgogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVkOgog
ICAgIGNhc2UgSXNCb29sZWFuOgpAQCAtNDc1LDYgKzQ4MCw4IEBAIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09iamVj
dFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAg
ICAgICAgICAgICAgIGNhc2UgU3ltYm9sVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWFwT2Jq
ZWN0VXNlOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICAgICAg
ICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWdFeHBPYmpl
Y3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA1MTM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRz
VGFibGUuaCIKQEAgLTg5OCw2ICs4OTksMjEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJc0pT
QXJyYXk6CiAgICAgICAgICAgICBjb21waWxlSXNKU0FycmF5KCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJc0pTTWFwOgorICAgICAgICAgICAgY29tcGlsZUlzSlNNYXAoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpTTWFwSGFzaDoKKyAgICAgICAgICAg
IGNvbXBpbGVKU01hcEhhc2goKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdl
dEpTTWFwQnVja2V0OgorICAgICAgICAgICAgY29tcGlsZUdldEpTTWFwQnVja2V0KCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAg
ICAgICAgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKKyAgICAgICAgICAgIGNvbXBpbGVJ
c05vbkVtcHR5SlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IElzT2JqZWN0OgogICAgICAgICAgICAgY29tcGlsZUlzT2JqZWN0KCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTYzNTUsNiArNjM3MSwyNTggQEAgcHJpdmF0ZToKICAgICAgICAgc2V0Qm9vbGVh
bihtX291dC5waGkoSW50MzIsIG5vdENlbGxSZXN1bHQsIGNlbGxSZXN1bHQpKTsKICAgICB9CiAK
KyAgICB2b2lkIGNvbXBpbGVKU01hcEhhc2goKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVl
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBp
c0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2Vs
bCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRIYXNoID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm9uRW1wdHlTdHJpbmdDYXNlID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKKworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUs
IHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3Vy
ZShub3RDZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcg
PSBtX291dC5lcXVhbChtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxf
dHlwZUluZm9UeXBlKSwgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1f
b3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwg
dW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5n
Q2FzZSwgbm9uRW1wdHlTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBt
X291dC5sb2FkUHRyKHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29u
c3RJbnRQdHIoMCkpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5U3RyaW5nQ2Fz
ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkVtcHR5U3RyaW5nQ2FzZSwgbm90Q2Vs
bCk7CisgICAgICAgIExWYWx1ZSBoYXNoID0gbV9vdXQubFNocihtX291dC5sb2FkMzIoc3RyaW5n
SW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksIG1fb3V0LmNvbnN0SW50MzIo
NikpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQgPSBt
X291dC5hbmNob3IoaGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNo
LCBtX291dC5jb25zdEludDMyKDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVz
dWFsbHkoY29udGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwg
aXNOdW1iZXJDYXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1i
ZXIodmFsdWUpLCB1bnN1cmUoaXNOdW1iZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShz
dHJhaWdodEhhc2gpLCB1bnN1cmUoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhzdHJhaWdodEhhc2gsIHNsb3dDYXNlKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMy
KTsKKyAgICAgICAgTFZhbHVlIGtleSA9IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtl
eTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7
CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0
LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAg
IHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0
SW50MzIoMjIpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAg
ICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAg
IHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0
ZW1wID0gbV9vdXQuYml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0
ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7
CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOwor
ICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9
IChrZXkgPDwgMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5z
aGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChr
ZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAg
PSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIo
MTUpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8v
IGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAg
PSBtX291dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0g
bV9vdXQuYml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsK
KyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAg
ICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAg
ICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5j
YXN0VG9JbnQzMihrZXkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBt
X291dC5hbmNob3Ioa2V5KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1D
YWxsKEludDMyLCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBIYXNoKSwgbV9jYWxsRnJh
bWUsIHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SW50
MzIobV9vdXQucGhpKEludDMyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0LCBub25FbXB0eVN0cmlu
Z0hhc2hSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVHZXRKU01hcEJ1Y2tldCgp
CisgICAgeworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcFN0YXJ0ID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbG9vcEFyb3VuZCA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbm90UHJlc2VudEluVGFibGUgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBub3RFbXB0eVZhbHVlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbm90RGVsZXRlZFZhbHVlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbm90Qml0RXF1YWwgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlOb3RDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgYm90aEFyZUNlbGxzID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNTdHJpbmcgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc051bWJlciA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVOdW1iZXJzID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNJbnQzMiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Cisg
ICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAg
ICAgICAgTFZhbHVlIG1hcDsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IE1hcE9iamVjdFVzZSkKKyAgICAgICAgICAgIG1hcCA9IGxvd01hcE9iamVjdChtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZSBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gU2V0T2JqZWN0VXNlKQorICAgICAgICAgICAgbWFwID0gbG93U2V0T2JqZWN0KG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgICAgIExWYWx1ZSBrZXkgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICBMVmFsdWUgaGFzaCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQzKCkp
OworCisgICAgICAgIExWYWx1ZSBoYXNoTWFwSW1wbCA9IG1fb3V0LmxvYWRQdHIobWFwLCBtX2hl
YXBzLkpTTWFwX0hhc2hNYXBJbXBsKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0Lmxv
YWRQdHIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfYnVmZmVyKTsKKyAgICAgICAg
TFZhbHVlIG1hc2sgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKGhhc2hNYXBJbXBsLCBtX2hlYXBz
Lkhhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaGFzaCk7CisgICAgICAgIG1fb3V0
Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB1bm1h
c2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOworICAgICAgICBMVmFs
dWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50
NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSksCisgICAgICAg
ICAgICB1bnN1cmUobm90UHJlc2VudEluVGFibGUpLCB1bnN1cmUobm90RW1wdHlWYWx1ZSkpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5vdERlbGV0ZWRWYWx1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291dC5j
b25zdEludFB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
Pj46OmRlbGV0ZWRWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVu
c3VyZShub3REZWxldGVkVmFsdWUpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3REZWxl
dGVkVmFsdWUsIG5vdEJpdEVxdWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1Y2tldEtleSA9IG1fb3V0
LmxvYWQ2NChoYXNoTWFwQnVja2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNrZXRfa2V5KTsKKyAgICAg
ICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1
YWwoa2V5LCBidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShub3RCaXRFcXVhbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVxdWFs
LCBidWNrZXRLZXlJc0NlbGwpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtl
eSksCisgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwgdW5zdXJlKGJ1Y2tldEtl
eU5vdENlbGwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGwsIGJv
dGhBcmVDZWxscyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoa2V5KSwKKyAgICAgICAg
ICAgIHVuc3VyZShib3RoQXJlQ2VsbHMpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOworICAgICAg
ICBtX291dC5icmFuY2goaXNTdHJpbmcoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShi
dWNrZXRLZXlJc1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENlbGwpOworICAgICAgICBt
X291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
Tm90Q2VsbCwgYnVja2V0S2V5SXNOdW1iZXIpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RO
dW1iZXIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJl
KGJ1Y2tldEtleUlzTnVtYmVyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
SXNOdW1iZXIsIGJvdGhBcmVOdW1iZXJzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TnVt
YmVyKGtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShib3RoQXJl
TnVtYmVycykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVOdW1iZXJzLCBidWNr
ZXRLZXlJc0ludDMyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYnVja2V0S2V5
KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShidWNrZXRLZXlJc0ludDMy
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJbnQzMiwgbG9vcEFyb3Vu
ZCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGtleSksCisgICAgICAgICAgICB1
bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGxvb3BBcm91bmQsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaSh1bm1hc2tlZEluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291dC5p
bnQzMk9uZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE1hcE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlv
bkpTU2V0RmluZEJ1Y2tldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90UHJlc2Vu
dEluVGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFByZXNl
bnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5waGkocG9pbnRl
clR5cGUoKSwgYnVja2V0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJlc3VsdCkp
OworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQorICAgIHsK
KyAgICAgICAgTFZhbHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNoaWxkMigp
KTsKKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygpOworCisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoMCkp
LAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNrZXQpKTsK
KworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0J1Y2tl
dCwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tl
dF92YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFs
dWUobV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7CisgICAg
fQorCisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eUpTTWFwQnVja2V0KCkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSBidWNrZXQgPSBsb3dNYXBCdWNrZXQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5ub3RFcXVhbChidWNrZXQsIG1fb3V0LmNvbnN0SW50
UHRyKDApKTsKKyAgICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKworICAgIHZvaWQg
Y29tcGlsZUlzSlNNYXAoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IENlbGxVc2UpIHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBzZXRCb29sZWFuKG1fb3V0LmVxdWFsKAor
ICAgICAgICAgICAgICAgIG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2Vs
bF90eXBlSW5mb1R5cGUpLAorICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNNYXBU
eXBlKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7CisgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisKKyAgICAg
ICAgTEJhc2ljQmxvY2sgaXNDZWxsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbm90Q2VsbFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ib29sZWFuRmFs
c2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHBy
b3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShj
b250aW51YXRpb24pKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFw
cGVuZFRvKGlzQ2VsbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGNlbGxSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuZXF1YWwoCisgICAgICAgICAgICBtX291
dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwKKyAg
ICAgICAgICAgIG1fb3V0LmNvbnN0SW50MzIoSlNNYXBUeXBlKSkpOworICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxs
UmVzdWx0LCBjZWxsUmVzdWx0KSk7CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlSXNPYmplY3RP
ck51bGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKQEAgLTk5MzYs
NiArMTAyMDQsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KGVk
Z2UsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgTFZhbHVl
IGxvd01hcE9iamVjdChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bG93Q2VsbChlZGdlKTsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTFZhbHVlIGxvd1NldE9iamVj
dChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdl
KTsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIHJlc3VsdCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb3dTdHJpbmcoRWRnZSBlZGdl
LCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRp
b24pCiAgICAgewpAQCAtMTAwNTksNiArMTAzNDEsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgc2V0
U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICB9CisKKyAgICBMVmFsdWUgbG93TWFwQnVja2V0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAg
IExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX21hcEJ1Y2tldFZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gdmFs
dWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVk
Z2UpOworICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICBMVmFsdWUgc3RyaWN0SW50NTJUb0ludDMy
KEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKQEAgLTEwMzYyLDYgKzEwNjU1LDEyIEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgc3Bl
Y3VsYXRlUmVnRXhwT2JqZWN0KGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTWFwT2JqZWN0VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAgICAg
ICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU3RyaW5nVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlU3RyaW5nKGVkZ2UpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMDY5MCw2ICsxMDk4OSwyOCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwogICAg
IH0KKworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwp
CisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIGpzVmFsdWVWYWx1
ZShjZWxsKSwgZWRnZSwgU3BlY01hcE9iamVjdCwgaXNOb3RUeXBlKGNlbGwsIEpTTWFwVHlwZSkp
OworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICB9
CisKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQor
ICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUo
Y2VsbCksIGVkZ2UsIFNwZWNTZXRPYmplY3QsIGlzTm90VHlwZShjZWxsLCBKU1NldFR5cGUpKTsK
KyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UpCisgICAgewor
ICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQog
ICAgIAogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCiAg
ICAgewpAQCAtMTE0NTgsNiArMTE3NzksMTAgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1f
c3RvcmFnZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxv
Y2spKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBCdWNrZXQoTm9kZSogbm9kZSwgTFZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgbV9tYXBCdWNrZXRWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWRO
b2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQogICAgIHZvaWQgc2V0RG91Ymxl
KE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIG1fZG91YmxlVmFsdWVz
LnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwpAQCAtMTE0
OTEsNiArMTE4MTYsMTAgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHNldFN0b3JhZ2UobV9u
b2RlLCB2YWx1ZSk7CiAgICAgfQorICAgIHZvaWQgc2V0TWFwQnVja2V0KExWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX25vZGUsIHZhbHVlKTsKKyAgICB9CiAgICAg
dm9pZCBzZXREb3VibGUoTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgc2V0RG91YmxlKG1f
bm9kZSwgdmFsdWUpOwpAQCAtMTE2NzQsNiArMTIwMDMsNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fanNWYWx1ZVZhbHVlczsKICAgICBIYXNoTWFw
PE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxO
b2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9k
ZSosIExvd2VyZWROb2RlVmFsdWU+IG1fbWFwQnVja2V0VmFsdWVzOwogICAgIEhhc2hNYXA8Tm9k
ZSosIExvd2VyZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOwogICAgIAogICAgIC8vIFRoaXMg
aXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBwcmV2ZW50cyBCMyBmcm9tIGhhdmluZyB0byBkbyBDU0Ug
b24gbG9hZGluZyBvZiBhcmd1bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYy
Niw2ICs2MjYsNTAgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXREdW1iVmlydHVhbENhbAog
ICAgICAgICB9KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6OmpzTWFwSGFzaChHUFJSZWcg
aW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEdQUlJlZyBpbnB1dCA9IGlu
cHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgbW92ZShpbnB1
dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7Cisg
ICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtl
eSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQp
OworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7
CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEzKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2Ny
YXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+
IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1t
MzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkg
Kz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChU
cnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAg
ICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAg
dXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gs
IGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgIG1vdmUoaW5wdXQsIHNj
cmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigyNyksIHNjcmF0Y2gpOworICAgIG5v
dDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0g
KGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRy
dXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKwor
ICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpCisgICAgdm9pZCogbWFzayA9IGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihVSU5UX01BWCkpOworICAg
IGFuZDY0KFRydXN0ZWRJbW1QdHIobWFzayksIGlucHV0QW5kUmVzdWx0KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5l
Q29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSB8fCBKSVRDb2RlOjppc0Jhc2Vs
aW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAgICAgfQogICAg
IH0KKworICAgIHZvaWQganNNYXBIYXNoKEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwgR1BSUmVnIHNj
cmF0Y2gpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE5NCw2ICsxOTQsNyBAQCB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3Bl
CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VTdFpaKShF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxs
KiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3Qp
OwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FSnNjSSko
RXhlY1N0YXRlKiwgSlNTY29wZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7Cit0eXBlZGVmIEpTQ2Vs
bCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VDSikoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklU
T3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9K
SVRPcGVyYXRpb25fRykoSlNHbG9iYWxPYmplY3QqKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BF
UkFUSU9OICpEX0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHJldmlzaW9uIDIwNTEzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Miw2ICs2Miw5IEBAIGVudW0gSlNfRVhQT1JUX1BSSVZBVEUgSW50cmluc2ljIHsKICAg
ICBJc1JlZ0V4cE9iamVjdEludHJpbnNpYywKICAgICBJc1R5cGVkQXJyYXlWaWV3SW50cmluc2lj
LAogICAgIEJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEludHJpbnNpYywKKyAgICBKU01hcEdl
dEludHJpbnNpYywKKyAgICBKU01hcEhhc0ludHJpbnNpYywKKyAgICBKU1NldEhhc0ludHJpbnNp
YywKIAogICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAgIFR5cGVkQXJyYXlMZW5ndGhJbnRy
aW5zaWMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNSw3ICs3MjUs
NiBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgICAgIEds
b2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc1NldFBy
aXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHBy
aXZhdGVGdW5jSXNTZXQpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5T
ZXRJdGVyYXRvclByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwg
U3RyaW5nKCksIHByaXZhdGVGdW5jU2V0SXRlcmF0b3IpLCBEb250RW51bSB8IERvbnREZWxldGUg
fCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5zZXRJdGVyYXRvck5leHRQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9u
OjpjcmVhdGUodm0sIHRoaXMsIDAsIFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4
dCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJv
cGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzTWFwUHJpdmF0ZU5h
bWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1
bmNJc01hcCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xv
YmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzQXJyYXlQ
cml2YXRlTmFtZSgpLCBhcnJheUNvbnN0cnVjdG9yLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPmlzQXJyYXkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5p
c0FycmF5Q29uc3RydWN0b3JQcml2YXRlTmFtZSgpLCBwcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1
Y3RvciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQ
cm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY29uY2F0TWVtY3B5
UHJpdmF0ZU5hbWUoKSwgcHJpdmF0ZUZ1bmNDb25jYXRNZW1jcHksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cC5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMjcgKzI2LDkwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5o
IgorI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ29waWVkQmxvY2tJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU01hcEl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiTWFwRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RD
b25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUg
IlN0cnVjdHVyZUlubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKK3RlbXBsYXRlPD4KK2Nv
bnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZv
ID0KKyAgICB7ICJIYXNoTWFwQnVja2V0IiwgLyogcGFyZW50IGNsYXNzIGluZm8gKi8gbnVsbHB0
ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5PikgfTsKK3RlbXBsYXRlPD4KK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCAv
KiBwYXJlbnQgY2xhc3MgaW5mbyAqLyBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBEYXRhPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tldCog
dGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9uZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2KTsK
KworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmllcjxV
bmtub3duPikgPT0gMCwgIldlIGFzc3VtZSB0aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4gbWVtYmVycyBvbmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5kVmFs
dWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9k
YXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOworfQor
Cit0ZW1wbGF0ZTw+Citjb25zdCBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxI
YXNoTWFwQnVja2V0RGF0YUtleT4+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBJbXBsIiwgLyog
cGFyZW50IGNsYXNzIGluZm8gKi8gbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4pIH07Cit0ZW1wbGF0
ZTw+Citjb25zdCBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVj
a2V0RGF0YUtleVZhbHVlPj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCAvKiBwYXJl
bnQgY2xhc3MgaW5mbyAqLyBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+KSB9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNl
bGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
KyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faGVhZCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBN
YXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgpLCB0aGlz
T2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhh
c2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojpjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tl
bikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsK
KworICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2Vs
bCk7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9y
LmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgpKSkgeworICAgICAg
ICBIYXNoTWFwQnVmZmVyVHlwZSogb2xkQnVmZmVyID0gdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0
KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplSW5CeXRlcyA9IHRoaXNPYmplY3QtPmJ1ZmZl
clNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBuZXdCdWZmZXIgPSBz
dGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyVHlwZSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShi
dWZmZXJTaXplSW5CeXRlcykpOworICAgICAgICBtZW1jcHkobmV3QnVmZmVyLCBvbGRCdWZmZXIs
IGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9idWZmZXIuc2V0V2l0
aG91dEJhcnJpZXIobmV3QnVmZmVyKTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEJ1ZmZl
ciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAgIH0KK30KKwogY29uc3QgQ2xhc3NJbmZvIEpTTWFw
OjpzX2luZm8gPSB7ICJNYXAiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTTWFwKSB9OwogCi12b2lkIEpTTWFwOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3ZvaWQgSlNN
YXA6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqKQogewotICAgIEpTTWFw
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNN
YXA6On5KU01hcCgpOworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX21hcC5z
ZXQodm0sIHRoaXMsIEhhc2hNYXBJbXBsOjpjcmVhdGUodm0pKTsKIH0KIAogc2l6ZV90IEpTTWFw
Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU01hcCogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwotICAgIHNpemVfdCBtYXBEYXRhU2l6ZSA9IHRoaXNPYmpl
Y3QtPm1fbWFwRGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKKyAgICAvL0pTTWFwKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7CisgICAgLy9zaXplX3QgbWFwRGF0YVNpemUgPSB0aGlz
T2JqZWN0LT5tX21hcERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7CisgICAgc2l6ZV90IG1hcERhdGFT
aXplID0gMDsgLy8gRklYTUU6CiAgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkg
KyBtYXBEYXRhU2l6ZTsKIH0KIApAQCAtNTgsMTMgKzEyMSwxNiBAQCBTdHJpbmcgSlNNYXA6OnRv
U3RyaW5nTmFtZShjb25zdCBKU09iamVjCiB2b2lkIEpTTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bihjZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgLy9qc0Nhc3Q8SlNNYXAqPihjZWxsKS0+
bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisKKyAgICBKU01hcCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcCk7CiB9CiAKLXZvaWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxs
KiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQorLyoKK3NpemVf
dCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdT
dG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1f
bWFwRGF0YS5jb3B5QmFja2luZ1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKKyAgICByZXR1cm4gbV9t
YXBEYXRhLnNpemUoZXhlYyk7CiB9CiAKIGJvb2wgSlNNYXA6OmhhcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQpAQCAtNzIsMjIgKzEzOCwxNCBAQCBib29sIEpTTWFwOjpoYXMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlCiAgICAgcmV0dXJuIG1fbWFwRGF0YS5jb250YWlucyhleGVjLCBr
ZXkpOwogfQogCi1zaXplX3QgSlNNYXA6OnNpemUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBtX21hcERhdGEuc2l6ZShleGVjKTsKLX0KLQogSlNWYWx1ZSBKU01hcDo6Z2V0KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiB7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBtX21hcERh
dGEuZ2V0KGV4ZWMsIGtleSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fbWFwLmdldChleGVj
LCBrZXkpOwogfQogCiB2b2lkIEpTTWFwOjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtl
eSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBtX21hcERhdGEuc2V0KGV4ZWMsIHRoaXMsIGtleSwg
dmFsdWUpOworICAgIG1fbWFwLnNldChleGVjLCB0aGlzLCBrZXksIHZhbHVlKTsKIH0KIAogdm9p
ZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKQEAgLTk5LDUgKzE1Nyw2IEBAIGJvb2wgSlNNYXA6
OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIHsKICAgICByZXR1cm4gbV9tYXBEYXRhLnJl
bW92ZShleGVjLCBrZXkpOwogfQorKi8KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcC5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMDIgKzMyLDUyOSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgSlNNYXBJdGVyYXRvcjsKK3N0cnVjdCBIYXNoTWFwQnVj
a2V0RGF0YUtleSB7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IGtleTsKK307CisKK3N0cnVj
dCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlIHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
a2V5OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiB2YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBEYXRhPgorY2xhc3MgSGFzaE1hcEJ1Y2tldCA6IHB1YmxpYyBKU0NlbGwgeworICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+
CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNo
TWFwQnVja2V0RGF0YUtleT46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1
cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1
Y3R1cmUuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgor
ICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1
Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRNYXBT
dHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQogCi1jbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0
aWJsZU9iamVjdCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBC
YXNlOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CiAKLSAg
ICBmcmllbmQgY2xhc3MgSlNNYXBJdGVyYXRvcjsKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldCog
Y3JlYXRlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEhhc2hNYXBCdWNrZXQ+KHZtLmhlYXApKSBIYXNoTWFw
QnVja2V0KHZtLCBzZWxlY3RTdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgYnVja2V0LT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFidWNrZXQtPm5leHQoKSk7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKCFidWNrZXQtPnByZXYoKSk7CisgICAgICAgIHJldHVybiBi
dWNrZXQ7CisgICAgfQorCisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIEhhc2hNYXBC
dWNrZXQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCisgICAgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TmV4dChWTSYg
dm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIG1fbmV4dC5zZXQodm0s
IHRoaXMsIGJ1Y2tldCk7CisgICAgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRQcmV2KFZN
JiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgbV9wcmV2LnNldCh2
bSwgdGhpcywgYnVja2V0KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0S2V5
KFZNJiB2bSwgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBtX2RhdGEua2V5LnNldCh2bSwg
dGhpcywga2V5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+Cisg
ICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwg
SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlPjo6dHlwZSBzZXRWYWx1ZShWTSYgdm0s
IEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX2RhdGEudmFsdWUuc2V0KHZtLCB0aGlz
LCB2YWx1ZSk7CisgICAgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBB
TFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNo
TWFwQnVja2V0RGF0YUtleT46OnZhbHVlPjo6dHlwZSBzZXRWYWx1ZShWTSYsIEpTVmFsdWUpIHsg
fQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YS5rZXkuZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBB
TFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNo
TWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWUsIEpTVmFsdWU+Ojp0eXBlIHZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGEudmFsdWUuZ2V0KCk7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisg
ICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9u
ZXh0LmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29u
c3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZGVs
ZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXREZWxldGVkKGJvb2wgZGVsZXRlZCkgeyBtX2RlbGV0ZWQgPSBkZWxldGVkOyB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mS2V5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihE
YXRhLCBrZXkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAg
ICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZSwgcHRyZGlmZl90Pjo6dHlwZSBvZmZzZXRPZlZhbHVl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwg
bV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihEYXRhLCB2YWx1ZSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIERhdGEgbV9kYXRhOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX25l
eHQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1fcHJldjsKKyAgICBib29sIG1f
ZGVsZXRlZCB7IGZhbHNlIH07CisKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCdWNrZXRUeXBl
PgorY2xhc3MgSGFzaE1hcEJ1ZmZlciB7CitwdWJsaWM6CisgICAgSGFzaE1hcEJ1ZmZlcigpID0g
ZGVsZXRlOworCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50MzJfdCBjYXBh
Y2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBjYXBhY2l0eSAqIHNpemVvZihCdWNrZXRUeXBl
Kik7CisgICAgfQogCi0gICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0
byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCi0gICAgLy8gZmllbGRzIGJlIFdy
aXRlQmFycmllcjxVbmtub3duPgotICAgIGNsYXNzIEVudHJ5IHsKLSAgICBwcml2YXRlOgotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxV
bmtub3duPiBtX3ZhbHVlOworICAgIEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCdWNrZXRUeXBlKio+KHRoaXMpOworICAgIH0K
KworICAgIHN0YXRpYyBIYXNoTWFwQnVmZmVyKiBjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCB1aW50MzJfdCBjYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6
ZSA9IEhhc2hNYXBCdWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAgICAgdm9p
ZCogZGF0YSA9IG51bGxwdHI7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIodm0uaGVh
cCk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIGFsbG9j
YXRpb25TaXplLCAmZGF0YSkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyAvLyAgRklYTUU6IHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlLgorICAgICAgICBIYXNoTWFw
QnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyKj4oZGF0YSk7CisgICAg
ICAgIG1lbXNldChidWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIHJldHVybiBi
dWZmZXI7CisgICAgfQorCit9OworCisvLyBGSVhNRTogbWFrZSB0aGlzIEFMV0FZU19JTkxJTkUg
aW5zaWRlIFByb3BlcnR5RGVzY3JpcHRvcgorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBzYW1l
VmFsdWVNYXAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICBp
ZiAoYSA9PSBiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIWEuaXNOdW1iZXIoKSkK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGEsIGIpOworICAgIGlm
ICghYi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG91YmxlIHggPSBh
LmFzTnVtYmVyKCk7CisgICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7CisgICAgYm9vbCB4SXNO
YU4gPSBzdGQ6OmlzbmFuKHgpOworICAgIGJvb2wgeUlzTmFOID0gc3RkOjppc25hbih5KTsKKyAg
ICBpZiAoeElzTmFOIHx8IHlJc05hTikKKyAgICAgICAgcmV0dXJuIHhJc05hTiAmJiB5SXNOYU47
CisgICAgcmV0dXJuIHggPT0geTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIG5vcm1hbGl6
ZU1hcEtleShKU1ZhbHVlIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc051bWJlcigpKQorICAgICAg
ICByZXR1cm4ga2V5OworICAgIGlmIChrZXkuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4ga2V5
OworCisgICAgZG91YmxlIGQgPSBrZXkuYXNEb3VibGUoKTsKKyAgICBpZiAoc3RkOjppc25hbihk
KSkKKyAgICAgICAgcmV0dXJuIGtleTsKKworICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50Pihk
KTsKKyAgICBpZiAoaSAhPSBkKQorICAgICAgICByZXR1cm4ga2V5OworICAgIHJldHVybiBqc051
bWJlcihpKTsKK30KIAotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVu
a25vd24+JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7
CitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVNYXBLZXkodmFs
dWUpID09IHZhbHVlLCAiV2UgZXhwZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50byB0
aGlzIGZ1bmN0aW9uLiIpOworCisgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKKyAgICAgICAg
ZG91YmxlIGQgPSB2YWx1ZS5hc0RvdWJsZSgpOworICAgICAgICBpZiAoIXN0ZDo6aXNuYW4oZCkp
IHsKKyAgICAgICAgICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKKyAgICAgICAgICAg
IGlmIChpID09IGQpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBqc051bWJlcihpKTsKICAgICAg
ICAgfQorICAgIH0KKyAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICAvL3N0YXRp
YyBkb3VibGUgc2xvd0Nhc2VzID0gMC4wOworICAgICAgICAvL3N0YXRpYyBkb3VibGUgaGFzSGFz
aCA9IDAuMDsKKyAgICAgICAgLy9kYXRhTG9nKCJqc01hcEhhc2ggc2xvdyBwYXRoIHN0cmluZyFc
biIpOworICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgICAg
ICBjb25zdCBTdHJpbmcmIHd0ZlN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsK
KyAgICAgICAgLy9zbG93Q2FzZXMrKzsKKyAgICAgICAgLy9pZiAod3RmU3RyaW5nLmltcGwoKS0+
aGFzSGFzaCgpKQorICAgICAgICAvLyAgICBoYXNIYXNoKys7CisgICAgICAgIC8vZGF0YUxvZygi
UGVyY2VudCBoYXNoIiwgaGFzSGFzaC9zbG93Q2FzZXMsICJcbiIpOworICAgICAgICByZXR1cm4g
d3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0KKyAgICB1aW50NjRfdCByYXdWYWx1ZSA9
IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgcmV0dXJuIFdURjo6aW50SGFzaChyYXdWYWx1
ZSk7Cit9CisKKy8vIFdlIGhhdmUgYSBkZWZhdWx0IHRlbXBsYXRlIGhlcmUganVzdCB0byBhbGxv
dyB1c2VycyBvZiB0aGlzIEFQSSB0byBkbyBIYXNoTWFwSW1wbDo6ZGVsZXRlZFZhbHVlKCksIGV0
Yy4KK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBJ
bXBsIDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICB0eXBl
ZGVmIEhhc2hNYXBCdWZmZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBCdWZmZXJUeXBlOwor
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0
aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0
cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEltcGxTZXRT
dHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNo
TWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1
ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1
YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJl
RmxhZ3MpLCBpbmZvKCkpOworICAgIH0KIAotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFs
dWU7CisgICAgc3RhdGljIEhhc2hNYXBJbXBsKiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoCisgICAgICAgICAgICBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpKTsKKworICAgICAgICBIYXNoTWFwSW1wbCogaW1w
bCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEhhc2hNYXBJbXBsPih2bS5oZWFwKSkgSGFz
aE1hcEltcGwodm0sIHNlbGVjdFN0cnVjdHVyZSh2bSkpOworICAgICAgICBpbXBsLT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9p
ZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKwor
ICAgIEhhc2hNYXBJbXBsKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQorICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAgICAsIG1fZGVs
ZXRlQ291bnQoMCkKKyAgICAgICAgLCBtX2NhcGFjaXR5KDQpCisgICAgeworICAgIH0KKworICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2J1ZmZlci5nZXQoKS0+YnVmZmVyKCk7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisK
KyAgICAgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRl
KHZtLCB0aGlzLCBtX2NhcGFjaXR5KSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQor
ICAgICAgICAgICAgICAgIEFTU0VSVChpc0VtcHR5KGJ1ZmZlcigpW2ldKSk7CiAgICAgICAgIH0K
IAotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7CisgICAgICAgIC8vIEZJWE1FOiBzb21lIGtpbmQgb2Yg
d3JpdGUgYmFycmllciBvbiBvdXIgb3duZXI/CisgICAgICAgIG1faGVhZC5zZXQodm0sIHRoaXMs
IEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwg
dGhpcywgSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSkpOworCisgICAgICAgIG1faGVhZC0+
c2V0TmV4dCh2bSwgbV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBt
X2hlYWQuZ2V0KCkpOworICAgICAgICBtX2hlYWQtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAg
IG1fdGFpbC0+c2V0RGVsZXRlZCh0cnVlKTsKKworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFw
QnVja2V0VHlwZSogZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEhhc2hNYXBCdWNrZXRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigtMSkpOworICAg
IH0KKworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFbXB0eShIYXNoTWFwQnVja2V0
VHlwZSogYnVja2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBlbXB0eVZhbHVl
KCk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXRUeXBlKiBkZWxldGVkVmFsdWUo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0VHlwZSo+
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlT
X0lOTElORSBib29sIGlzRGVsZXRlZChIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBkZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKworICAg
IEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXko
a2V5KTsKKworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7Cisg
ICAgICAgIHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIGtleSkgJiBtYXNrOworICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAgICAg
ICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKworICAgICAgICB3
aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVj
a2V0KSAmJiBzYW1lVmFsdWVNYXAoZXhlYywga2V5LCBidWNrZXQtPmtleSgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7CisgICAgICAgICAgICBpbmRleCA9IChpbmRl
eCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CiAgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBKU1ZhbHVlIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAg
ICAgaWYgKEhhc2hNYXBCdWNrZXRUeXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkp
KQorICAgICAgICAgICAgcmV0dXJuICgqYnVja2V0KS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQogCi0gICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29u
c3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
a2V5LnNldCh2bSwgb3duZXIsIGtleSk7CisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhZmluZEJ1
Y2tldChleGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAg
ICB7CisgICAgICAgIGtleSA9IG5vcm1hbGl6ZU1hcEtleShrZXkpOworCisgICAgICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5
IC0gMTsKKyAgICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywga2V5KSAmIG1h
c2s7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7
CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAg
ICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAgICAgICAgICAgaWYgKCFpc0RlbGV0
ZWQoYnVja2V0KSAmJiBzYW1lVmFsdWVNYXAoZXhlYywga2V5LCBidWNrZXQtPmtleSgpKSkgewor
ICAgICAgICAgICAgICAgIGJ1Y2tldC0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCAr
IDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CiAgICAgICAg
IH0KIAotICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5
KTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5ld0VudHJ5ID0gbV90YWlsLmdldCgpOwor
ICAgICAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRL
ZXkodm0sIGtleSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOworICAg
ICAgICBuZXdFbnRyeS0+c2V0RGVsZXRlZChmYWxzZSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRU
eXBlKiBuZXdUYWlsID0gSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIG1f
dGFpbC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOworICAgICAgICBuZXdUYWlsLT5zZXRQcmV2KHZt
LCBuZXdFbnRyeSk7CisgICAgICAgIG5ld1RhaWwtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAg
IG5ld0VudHJ5LT5zZXROZXh0KHZtLCBuZXdUYWlsKTsKKyAgICAgICAgdWludDMyX3QgbmV3U2l6
ZSA9ICsrbV9zaXplOworICAgICAgICBpZiAoMipuZXdTaXplID4gbV9jYXBhY2l0eSkKKyAgICAg
ICAgICAgIHJlaGFzaChleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVt
b3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBIYXNoTWFw
QnVja2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAgICAgaWYg
KCFidWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICAgICAgLy8gRklYTUU6IHN0b3AgbGVha2luZyBtZW1vcnkgaGVyZSwg
YW5kIGZpZ3VyZSBvdXQgaXRlcmF0b3JzLgorICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogaW1w
bCA9ICpidWNrZXQ7CisgICAgICAgIGltcGwtPm5leHQoKS0+c2V0UHJldih2bSwgaW1wbC0+cHJl
digpKTsKKyAgICAgICAgaW1wbC0+cHJldigpLT5zZXROZXh0KHZtLCBpbXBsLT5uZXh0KCkpOwor
ICAgICAgICBpbXBsLT5zZXREZWxldGVkKHRydWUpOworCisgICAgICAgICpidWNrZXQgPSBkZWxl
dGVkVmFsdWUoKTsKKworICAgICAgICBtX2RlbGV0ZUNvdW50Kys7CisKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHsK
KyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgICAgICBtX2NhcGFjaXR5ID0gbV9j
YXBhY2l0eSAqIDI7CisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhpcywgSGFzaE1hcEJ1ZmZl
clR5cGU6OmNyZWF0ZSh2bSwgdGhpcywgbV9jYXBhY2l0eSkpOworICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2Fw
YWNpdHk7IGkrKykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNFbXB0eSh0aGlzLT5idWZmZXIo
KVtpXSkpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYgdm0sIGNvbnN0
IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1f
dmFsdWUuc2V0KHZtLCBvd25lciwgdmFsdWUpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSog
aXRlciA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogZW5kID0g
bV90YWlsLmdldCgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAt
IDE7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0g
MSkpKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIo
KTsKKyAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgICAgICB1aW50MzJfdCBp
bmRleCA9IGpzTWFwSGFzaChleGVjLCBpdGVyLT5rZXkoKSkgJiBtYXNrOworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5k
ZXhdOworICAgICAgICAgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgICAg
ICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBpdGVyOworICAgICAgICAgICAgaXRl
ciA9IGl0ZXItPm5leHQoKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICB2b2lkIGNsZWFy
KCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAgICAgICAgICAgIG1f
dmFsdWUuY2xlYXIoKTsKKyAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9zaXplID49IG1fZGVsZXRlQ291bnQpOwor
ICAgICAgICByZXR1cm4gbV9zaXplIC0gbV9kZWxldGVDb3VudDsKKyAgICB9CisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICAgICAgbV9kZWxldGVD
b3VudCA9IDA7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBoZWFkID0gbV9oZWFkLmdldCgp
OworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gbV9oZWFkLT5uZXh0KCk7Cisg
ICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiB0YWlsID0gbV90YWlsLmdldCgpOworICAgICAgICB3
aGlsZSAoYnVja2V0ICE9IHRhaWwpIHsKKyAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBu
ZXh0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgICAgICAvLyBXZSByZXN0YXJ0IGVhY2ggaXRl
cmF0b3IgYnkgcG9pbnRpbmcgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgICAgICAgICAg
ICBidWNrZXQtPnNldE5leHQodm0sIGhlYWQpOworICAgICAgICAgICAgYnVja2V0ID0gbmV4dDsK
ICAgICAgICAgfQotICAgIH07CisgICAgICAgIG1faGVhZC0+c2V0TmV4dCh2bSwgbV90YWlsLmdl
dCgpKTsKKyAgICAgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgICAg
ICBtX2NhcGFjaXR5ID0gNDsKKyAgICAgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBIYXNoTWFw
QnVmZmVyVHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBtX2NhcGFjaXR5KSk7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSBzaXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldFR5cGUqKTsKKyAg
ICB9CisKKy8vIEZJWE1FOiBtYWtlIHByaXZhdGUuCitwdWJsaWM6CisgICAgV3JpdGVCYXJyaWVy
PEhhc2hNYXBCdWNrZXRUeXBlPiBtX2hlYWQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNr
ZXRUeXBlPiBtX3RhaWw7CisgICAgQ29weUJhcnJpZXI8SGFzaE1hcEJ1ZmZlclR5cGU+IG1fYnVm
ZmVyOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICB1aW50MzJfdCBtX2RlbGV0ZUNvdW50Owor
ICAgIHVpbnQzMl90IG1fY2FwYWNpdHk7Cit9OworCitjbGFzcyBKU01hcEl0ZXJhdG9yOworCitj
bGFzcyBKU01hcCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4gQnVja2V0VHlwZTsKKworICAgIGZyaWVuZCBjbGFzcyBK
U01hcEl0ZXJhdG9yOwogCi0gICAgdHlwZWRlZiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNNYXBJdGVy
YXRvcj4gTWFwRGF0YTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNNYXBUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTTWFwKiBjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNN
YXAodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSwgc3RydWN0dXJlLT5nbG9iYWxP
YmplY3QoKSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKwog
ICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVy
ZSk7CiAgICAgfQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6
ZV90IHNpemUoRXhlY1N0YXRlKik7Ci0gICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgSlNWYWx1
ZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXQoRXhlY1N0YXRlKiwgSlNWYWx1ZSBr
ZXksIEpTVmFsdWUgdmFsdWUpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKik7Ci0gICAgYm9v
bCByZW1vdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CisgICAgQUxXQVlTX0lOTElORSBzaXplX3Qg
c2l6ZShFeGVjU3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5zaXplKCk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5nZXQoZXhlYywga2V5KTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmhhcyhleGVjLCBrZXkpOwor
ICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fbWFwLT5hZGQoZXhlYywg
a2V5LCB2YWx1ZSk7CisgICAgfQorICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiBleGVjKQorICAg
IHsKKyAgICAgICAgbV9tYXAtPmNsZWFyKGV4ZWMpOworICAgIH0KKyAgICBib29sIHJlbW92ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFw
LT5yZW1vdmUoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEJ1Y2tldFR5
cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9tYXAtPmZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICB9CiAKIHByaXZh
dGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBC
YXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9tYXBEYXRhKHZtLCB0aGlzKQogICAgIHsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogICAgIHN0YXRpYyBz
aXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdT
dG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAgICAgc3RhdGljIFN0cmlu
ZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKIAotICAgIE1hcERh
dGEgbV9tYXBEYXRhOworICAgIC8vIEZJWE1FOiBkb24ndCBtYWtlIHRoaXMgcHVibGljLgorcHVi
bGljOgorICAgIHR5cGVkZWYgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPj4gSGFzaE1hcEltcGw7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBJbXBs
PiBtX21hcDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3Iu
aCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUgIkNvbW1vbklkZW50aWZp
ZXJzLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU01h
cC5oIgpAQCAtNDEsNiArNDQsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFwLnNldCh2
bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0ZXJhdG9yKHZtLCBtX21hcC0+bV9t
YXAtPm1faGVhZC5nZXQoKSk7CiB9CiAKIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNDksNiArNTMsNyBAQCB2
b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fbWFwKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVyKTsKIH0KIAog
SlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTYyLDggKzY3LDkgQEAgSlNWYWx1ZSBKU01h
cEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcgogCiBKU01hcEl0ZXJhdG9yKiBKU01hcEl0ZXJh
dG9yOjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBjbG9uZSA9IEpTTWFwSXRl
cmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCkt
Pm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgpLCBtX2tpbmQpOwotICAgIGNsb25l
LT5tX2l0ZXJhdG9yID0gbV9pdGVyYXRvcjsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IGF1dG8gY2xvbmUgPSBKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGV4ZWMtPmNhbGxlZSgpLT5n
bG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9tYXAuZ2V0KCksIG1fa2lu
ZCk7CisgICAgY2xvbmUtPnNldEl0ZXJhdG9yKHZtLCBtX2l0ZXIuZ2V0KCkpOwogICAgIHJldHVy
biBjbG9uZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJ
dGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNNYXBJdGVyYXRvciA6IHB1YmxpYyBKU05vbkZp
bmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT4gSGFzaE1hcEJ1Y2tldDsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKIApAQCAtNTEsNTIgKzUyLDY3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBhZHZhbmNl
SXRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBXVEY6OktleVZhbHVlUGFpcjxK
U1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0b3IubmV4dChwYWly
KSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogcHJldiA9IG1faXRlci5nZXQoKTsKKyAgICAgICAg
aWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhhc2hNYXBC
dWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICYm
IGJ1Y2tldC0+ZGVsZXRlZCgpKSB7CisgICAgICAgICAgICBwcmV2ID0gYnVja2V0OworICAgICAg
ICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFi
dWNrZXQpIHsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIG51bGxwdHIpOwor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgc2V0SXRlcmF0
b3IoZXhlYy0+dm0oKSwgYnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0ZXIgb24gdGhlIGxhc3QgdmFs
dWUuCisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorICAgIGJvb2wgbmV4dChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCog
YnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZhbHVl
KQotICAgICAgICAgICAgdmFsdWUgPSBwYWlyLnZhbHVlOworICAgICAgICAgICAgdmFsdWUgPSBi
dWNrZXQtPnZhbHVlKCk7CiAgICAgICAgIGVsc2UgaWYgKG1fa2luZCA9PSBJdGVyYXRlS2V5KQot
ICAgICAgICAgICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0
LT5rZXkoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNh
bGxGcmFtZSwgcGFpci5rZXksIHBhaXIudmFsdWUpOworICAgICAgICAgICAgdmFsdWUgPSBjcmVh
dGVQYWlyKGV4ZWMsIGJ1Y2tldC0+a2V5KCksIGJ1Y2tldC0+dmFsdWUoKSk7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dEtleVZhbHVlKEpTVmFsdWUmIGtleSwg
SlNWYWx1ZSYgdmFsdWUpCisgICAgYm9vbCBuZXh0S2V5VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlJiBrZXksIEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAgICAgV1RGOjpLZXlWYWx1
ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLm5l
eHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4
ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBrZXkgPSBwYWlyLmtleTsKLSAgICAgICAgdmFsdWUgPSBwYWlyLnZhbHVlOworICAg
ICAgICBrZXkgPSBidWNrZXQtPmtleSgpOworICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+dmFsdWUo
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdm9pZCBmaW5pc2goKQogICAg
IHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsKKyAgICAgICAgLy9tX2l0ZXJhdG9yLmZp
bmlzaCgpOwogICAgIH0KIAogICAgIEl0ZXJhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQogICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bWFwLmdldCgpOyB9CiAgICAgSlNNYXBJdGVyYXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAg
ICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JEYXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICZtX2l0ZXJhdG9yOwotICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU01hcEl0
ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVj
dCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAgIEpTTWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNNYXAqLCBJdGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFz
ZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1f
bWFwRGF0YS5jcmVhdGVJdGVyYXRvckRhdGEodGhpcykpCiAgICAgICAgICwgbV9raW5kKGtpbmQp
CisgICAgeyB9CisKKyAgICB2b2lkIHNldEl0ZXJhdG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCog
YnVja2V0KQogICAgIHsKKyAgICAgICAgbV9pdGVyLnNldCh2bSwgdGhpcywgYnVja2V0KTsKICAg
ICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNN
YXAqKTsKQEAgLTEwNCw3ICsxMjAsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01h
cD4gbV9tYXA7Ci0gICAgSlNNYXA6Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9yOwor
ICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2lu
ZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpT
TWFwSXRlcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNw
cAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAotdm9pZCBKU1NldDo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCit2b2lkIEpTU2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0g
ICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsKLSAgICB0aGlzT2Jq
ZWN0LT5KU1NldDo6fkpTU2V0KCk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAg
IG1fbWFwLnNldCh2bSwgdGhpcywgSGFzaE1hcEltcGw6OmNyZWF0ZSh2bSkpOwogfQogCiBTdHJp
bmcgSlNTZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopCkBAIC01
MCwyMyArNTAsMjAgQEAgU3RyaW5nIEpTU2V0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplYwog
CiBzaXplX3QgSlNTZXQ6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQogewotICAgIEpTU2V0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgc2l6ZV90IHNldERhdGFT
aXplID0gdGhpc09iamVjdC0+bV9zZXREYXRhLmNhcGFjaXR5SW5CeXRlcygpOworICAgIC8vSlNT
ZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsKKyAgICAvL3NpemVfdCBzZXRE
YXRhU2l6ZSA9IHRoaXNPYmplY3QtPm1fc2V0RGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKKyAgICBz
aXplX3Qgc2V0RGF0YVNpemUgPSAwOwogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNl
bGwpICsgc2V0RGF0YVNpemU7CiB9CiAKIHZvaWQgSlNTZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KGNlbGwsIHZpc2l0b3IpOwotICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEudmlz
aXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLX0KLQotdm9pZCBKU1NldDo6Y29weUJhY2tpbmdT
dG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4p
Ci17Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci0g
ICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2luZ1N0b3JlKHZpc2l0
b3IsIHRva2VuKTsKKyAgICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7CiB9CiAKKy8qCiBib29s
IEpTU2V0OjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVy
biBtX3NldERhdGEuY29udGFpbnMoZXhlYywgdmFsdWUpOwpAQCAtOTEsNSArODgsNiBAQCBib29s
IEpTU2V0OjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhCiB7CiAgICAgcmV0dXJuIG1fc2V0
RGF0YS5yZW1vdmUoZXhlYywgdmFsdWUpOwogfQorKi8KIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldC5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjZGVmaW5lIEpTU2V0X2gKIAogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCisj
aW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIk1hcERh
dGEuaCIKIApAQCAtMzQsNjEgKzM1LDE4IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1Nl
dEl0ZXJhdG9yOwogCi1jbGFzcyBKU1NldCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7
CitjbGFzcyBKU1NldCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB0
eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5PiBCdWNrZXRUeXBlOwogCiAgICAgZnJpZW5kIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLSAg
ICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVudHJ5IHRvIG1haW50YWluIHRoaXMg
bGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMgYmUgV3JpdGVCYXJyaWVyPFVua25v
d24+Ci0gICAgY2xhc3MgRW50cnkgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFdyaXRlQmFycmll
cjxVbmtub3duPiBtX2tleTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJy
aWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotICAgICAgICB7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9rZXkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXkoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBK
U1ZhbHVlIGtleSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuc2V0KHZtLCBvd25lciwg
a2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0S2V5V2l0aG91dFdyaXRlQmFycmll
cihKU1ZhbHVlIGtleSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuc2V0V2l0aG91dFdy
aXRlQmFycmllcihrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYs
IGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5jbGVhcigpOwotICAg
ICAgICB9Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnksIEpTU2V0SXRl
cmF0b3I+IFNldERhdGE7Ci0KICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTU2V0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU1NldCogY3Jl
YXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC05NywzMiArNTUsNTYgQEAgcHVi
bGljOgogICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1
cm4gaW5zdGFuY2U7CiAgICAgfQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKIAogICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSk7CiAgICAgfQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNW
YWx1ZSk7Ci0gICAgc2l6ZV90IHNpemUoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBhZGQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3Rh
dGUqKTsKLSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBzaXplX3Qg
c2l6ZShFeGVjU3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5zaXplKCk7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5oYXMoZXhlYywga2V5KTsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXkpCisgICAgeworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSk7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBtX21hcC0+Y2xl
YXIoZXhlYyk7CisgICAgfQorCisgICAgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+cmVtb3ZlKGV4ZWMsIGtleSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5m
aW5kQnVja2V0KGV4ZWMsIGtleSk7CisgICAgfQogCi1wcml2YXRlOgorcHVibGljOgogICAgIEpT
U2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQotICAgICAgICAsIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGlt
YXRlZFNpemUoSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxs
KiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdO
YW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7CiAKLSAgICBTZXREYXRhIG1fc2V0RGF0
YTsKKyAgICB0eXBlZGVmIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXk+PiBIYXNoTWFwSW1wbDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEltcGw+IG1fbWFw
OworICAgIC8vU2V0RGF0YSBtX3NldERhdGE7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1MTM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX3Nl
dC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJdGVyYXRvcih2bSwgbV9z
ZXQtPm1fbWFwLT5tX2hlYWQuZ2V0KCkpOwogfQogCiB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTQ5LDYgKzUw
LDcgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3NldCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7
CiB9CiAKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCkBAIC02Miw4ICs2NCw5IEBAIEpTVmFs
dWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNTZXRJdGVyYXRvciogSlNT
ZXRJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBK
U1NldEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBtX3NldC5nZXQoKSwgbV9raW5kKTsKLSAg
ICBjbG9uZS0+bV9pdGVyYXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIGNsb25lID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fc2V0LmdldCgp
LCBtX2tpbmQpOworICAgIGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAg
ICByZXR1cm4gY2xvbmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiAr
MzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3IgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5PiBIYXNoTWFwQnVja2V0OwogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5h
bE9iamVjdCBCYXNlOwogCkBAIC01Miw0NiArNTMsNjUgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIGFkdmFu
Y2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWly
PEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBh
aXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgpOworICAgICAg
ICBpZiAoIXByZXYpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSGFzaE1h
cEJ1Y2tldCogYnVja2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQg
JiYgYnVja2V0LT5kZWxldGVkKCkpIHsKKyAgICAgICAgICAgIHByZXYgPSBidWNrZXQ7CisgICAg
ICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWJ1Y2tldCkgeworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgbnVsbHB0cik7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBzZXRJdGVy
YXRvcihleGVjLT52bSgpLCBidWNrZXQpOyAvLyBXZSBrZWVwIG1faXRlciBvbiB0aGUgbGFzdCB2
YWx1ZS4KKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisKKyAgICBib29sIG5leHQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNr
ZXQqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBpZiAobV9raW5kID09IEl0ZXJhdGVW
YWx1ZSB8fCBtX2tpbmQgPT0gSXRlcmF0ZUtleSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci5r
ZXk7CisgICAgICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLmtl
eSk7CisgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwg
YnVja2V0LT5rZXkoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHZvaWQg
ZmluaXNoKCkKICAgICB7Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7CisgICAgICAgIC8v
IEZJWE1FOiBmaWd1cmUgdGhpcyBvdXQuCisgICAgICAgIC8vbV9pdGVyYXRvci5maW5pc2goKTsK
ICAgICB9CiAKICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NldC5nZXQo
KTsgfQogICAgIEpTU2V0SXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNTZXQ6
OlNldERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNTZXRJdGVyYXRvcihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCogaXRlcmF0ZWRPYmplY3QsIEl0ZXJh
dGlvbktpbmQga2luZCkKKyAgICBKU1NldEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0
cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX3NldERhdGEu
Y3JlYXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQogICAgIHsK
ICAgICB9CiAKKyAgICB2b2lkIHNldEl0ZXJhdG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVj
a2V0KQorICAgIHsKKyAgICAgICAgbV9pdGVyLnNldCh2bSwgdGhpcywgYnVja2V0KTsgCisgICAg
fQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTU2V0
Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjcmVhdGVQYWlyKENhbGxGcmFtZSos
IEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU1NldD4gbV9zZXQ7Ci0gICAg
SlNTZXQ6OlNldERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9yOworICAgIFdyaXRlQmFycmll
cjxIYXNoTWFwQnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9Owog
U1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC04Miw4ICs4MiwxMCBAQCBlbnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogICAgIE1vZHVs
ZUVudmlyb25tZW50VHlwZSwKICAgICBSZWdFeHBPYmplY3RUeXBlLAogICAgIFByb3h5T2JqZWN0
VHlwZSwKKyAgICBKU01hcFR5cGUsCisgICAgSlNTZXRUeXBlLAogCi0gICAgTGFzdEpTQ09iamVj
dFR5cGUgPSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVjdFR5cGUgPSBKU01hcFR5
cGUsCiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9PSBzaXplb2YodWludDhf
dCksIHNpemVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCwxNCArNzAsMTMgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bQogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+Y2xlYXIsIG1hcFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAg
ICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1l
cy0+ZGVsZXRlS2V5d29yZCwgbWFwUHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAg
SlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+
Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVu
Y0hhcywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwg
RG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJ
Q19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQ
cm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxLCBKU01hcEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBt
YXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHVi
bGljTmFtZSgpLCBtYXBQcm90b0Z1bmNLZXlzLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkudmFsdWVzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNWYWx1ZXMsIERvbnRFbnVtLCAw
KTsKIAotICAgIC8vIFByaXZhdGUgZ2V0IC8gc2V0IG9wZXJhdGlvbnMuCi0gICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuZ2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7Cisg
ICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIG1hcFByb3RvRnVu
Y0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMo
KS5zZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKIAogICAg
IEpTRnVuY3Rpb24qIGVudHJpZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgMCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUo
KS5zdHJpbmcoKSwgbWFwUHJvdG9GdW5jRW50cmllcyk7CkBAIC05MCwxNiArODksMTQgQEAgdm9p
ZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiBBTFdBWVNfSU5MSU5FIHN0
YXRpYyBKU01hcCogZ2V0TWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHRoaXNWYWx1
ZSkKIHsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKFVOTElLRUxZ
KCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUs
IGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIEpTTWFwKiBtYXAgPSBqc0R5bmFtaWNDYXN0PEpT
TWFwKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIW1hcCkgewotICAgICAgICB0aHJvd1R5cGVFcnJv
cihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1h
cCBvYmplY3QiKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4g
bWFwOworICAgIGlmIChMSUtFTFkodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNNYXBU
eXBlKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7CisgICAgdGhy
b3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVk
IG9uIG5vbi1NYXAgb2JqZWN0IikpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZy
YW1lKQpAQCAtMTc3LDExICsxNzQsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
cFByb3RvRnVuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVh
dGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+
bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZUtleSkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGpzRHluYW1pY0Nhc3Q8
SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKTsKLX0KLQogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykK
IHsKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKSk7CkBAIC0xOTQsNyArMTg2LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBwcml2YXRlRnVuYwogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihl
eGVjLT50aGlzVmFsdWUoKSkpOwogICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganNDYXN0
PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBrZXksIHZh
bHVlOwotICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAg
aWYgKGl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUoZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAg
SlNBcnJheSogcmVzdWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAs
IGtleSk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAxLCB2YWx1
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUu
aAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
UHJvdG90eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKLUVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVjU3RhdGUqKTsKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3Rh
dGUqKTsKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRv
ck5leHQoRXhlY1N0YXRlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAs
NyArNzAsNyBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAg
SlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+
YWRkLCBzZXRQcm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgc2V0UHJvdG9G
dW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQcm90b0Z1bmNE
ZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0s
IDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEsIEpT
U2V0SGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgp
LCBzZXRQcm90b0Z1bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1bmN0aW9uKiB2
YWx1ZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmluZygpLCBzZXRQ
cm90b0Z1bmNWYWx1ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiSlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5j
bHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb21pc2VE
ZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1
ZGUgIkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgpAQCAtMjQ5LDYgKzI1MCwxMCBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNlbmRp
ZgorICAgIGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIGhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAKICAgICBpdGVy
YXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp0aGlzLCBK
U0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpLCAxKSkpOwog
ICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZVN0ZEZ1
bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNiArMzI5
LDEwIEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJsb2NrU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOworICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25n
PFN0cnVjdHVyZT4gaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0
dXJlPiBoYXNoTWFwSW1wbFNldFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNo
TWFwSW1wbE1hcFN0cnVjdHVyZTsKIAogICAgIFN0cm9uZzxKU0NlbGw+IGl0ZXJhdGlvblRlcm1p
bmF0b3I7CiAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY2LDcg
KzEzNjYsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAg
ICAgICAgICBjYXNlIE1hcERhdGFTdGFydFZpc2l0RW50cnk6IHsKICAgICAgICAgICAgICAgICBK
U01hcEl0ZXJhdG9yKiBpdGVyYXRvciA9IG1hcEl0ZXJhdG9yU3RhY2subGFzdCgpOwogICAgICAg
ICAgICAgICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZXJh
dG9yLT5uZXh0S2V5VmFsdWUoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWl0
ZXJhdG9yLT5uZXh0S2V5VmFsdWUobV9leGVjLCBrZXksIHZhbHVlKSkgewogICAgICAgICAgICAg
ICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KG9iamVjdCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287475</attachid>
            <date>2016-08-30 20:31:22 -0700</date>
            <delta_ts>2016-08-31 20:52:54 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>125460</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRl
ci5jcHAKKyAgICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmll
ci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVk
VHlwZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMwNCw2ICsxMzA0LDggQEAKIAkJNzk3
RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJ
CTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09y
aWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTc5QTA5MDdGMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RDFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovOyB9OworCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTIyODM1MUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRo
UHJvZmlsZS5jcHAgKi87IH07CiAJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgfTsKIAkJNzlBRjBC
RTQxRDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1
RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTM0LDYgKzM1MzYsOCBAQAogCQk3OTdFMDdBNzFC
OEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsg
cGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRo
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFBy
b2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFyaXRoUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlG
RTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU3NjgsNiArNTc3Miw4IEBACiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1
OUVFIC8qIEdldFB1dEluZm8uaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyog
R2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0
dGVyU2V0dGVyLmggKi8sCisJCQkJNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJ
bXBsLmNwcCAqLywKKwkJCQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8s
CiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4
NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKQEAgLTc0
MjgsNiArNzQzNCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNo
ZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4
RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5QTA5MDgwMUQ3Njg0
NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkx
OTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRl
cnMgKi8sCkBAIC05MTQ2LDYgKzkxNTMsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5
QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0
ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMx
NzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZBQTAwQ0Y2NTY0IC8q
IEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3
IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZp
c2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRl
ZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiRGly
ZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0
cmluZ09iamVjdC5oIgpAQCAtMzQ2LDYgKzM0OCwxMiBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBpZiAoY2xhc3NJbmZvID09IFJlZ0V4cE9iamVjdDo6
aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1JlZ0V4cE9iamVjdDsKKworICAgIGlmIChjbGFz
c0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNNYXBPYmplY3Q7CisK
KyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVj
U2V0T2JqZWN0OwogICAgIAogICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0
aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9u
IDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MSArMzksNDMgQEAgY2xhc3MgU3RydWN0dXJlOwog
CiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0ZWRUeXBlOwogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAgICAgPSAwOyAvLyBXZSBkb24ndCBrbm93IGFueXRo
aW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAg
ICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQXJyYXkgICAgICAgICAgICAgID0gMXUgPDwgMTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0gMXUgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAg
ICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDhBcnJheSBvciBvbmUg
b2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDE2
QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5
IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjSW50MzJBcnJheSAgICAgICAgID0gMXUgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdSA8PCA2OyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gVWludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5ICA9IDF1IDw8IDc7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMu
Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1
IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1
YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAg
ICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MzJBcnJheSBvciBvbmUg
b2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Zsb2F0
MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJy
YXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdSA8PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXVsbCA8PCAwOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxsIDw8IDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpT
QXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bmN0aW9uICAgICAgICAg
ICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0gMXVsbCA8PCAzOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
K3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MTZBcnJheSAgICAgICAgID0gMXVs
bCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1
YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDMyQXJyYXkgICAg
ICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25l
IG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50
OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OEFy
cmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXVsbCA8PCA3OyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJheSAgICAgICAgPSAxdWxsIDw8IDg7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMu
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1
bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQzMkFycmF5
ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9y
IG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
RmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJheSB8IFNwZWNJbnQx
NkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNwZWNVaW50OENsYW1w
ZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8IFNwZWNGbG9hdDMy
QXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8PCAxMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgRGly
ZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU2Nv
cGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFy
Z3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09i
amVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3Qu
Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1
IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBSZWdFeHBPYmplY3QgKGFuZCBub3QgYW55IHN1
YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y09iamVjdE90aGVyICAgICAgICA9IDF1IDw8IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2Jq
ZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJheSwgb3IgSlNGdW5jdGlvbi4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0ICAgICAgICAgICAgID0gU3BlY0ZpbmFs
T2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwg
U3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1bWVudHMgfCBTcGVjU3RyaW5nT2Jq
ZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2Vk
IGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlvbi4KLXN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0gMXUgPDwgMTc7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAgICAgPSAxdSA8PCAx
ODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlm
aWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAg
PSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1bWVudHMgICAgPSAx
dWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0Lgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3QgICAgICAgPSAxdWxs
IDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCitzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1bGwgPDwgMTU7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5vdCBhbnkgc3ViY2xhc3Mgb2YgUmVn
RXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWFwT2JqZWN0ICAg
ICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQncyBkZWZpbml0ZWx5IE1hcCBvYmplY3QgKGNhbiBp
dCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y1NldE9iamVjdCAgICAgICAgICA9IDF1bGwgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBzIFNl
dCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1bGwgPDwgMTg7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBK
U0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAg
ICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVj
VHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50
cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3BlY01hcE9iamVjdCB8
IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVz
dGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDF1bGwgPDwgMTk7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAgICAgPSAxdWxsIDw8IDIwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFuIGlkZW50aWZpZXIu
CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZyAgICAgICAgICAgICA9IFNw
ZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdWYXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3Ry
aW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTeW1ib2wgICAgICAgICAgICAg
PSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3ltYm9sLgotc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAgICAgICAgPSAxdSA8PCAyMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVm
aW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0
IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1bGwgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAg
ICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBz
dWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5
bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNv
ZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAgICAgICA9IFNwZWNP
YmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNDZWxsT3RoZXI7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9v
bEludDMyICAgICAgICAgID0gMXUgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3
aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTm9uQm9v
bEludDMyICAgICAgID0gMXUgPDwgMjI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRo
IHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxsIDw8IDIzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
SW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwgPDwgMjQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJ
bnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAgICAgPSBTcGVjQm9vbEludDMyIHwgU3BlY05vbkJv
b2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyLgotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdSA8PCAyMzsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBk
ZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
SW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5v
dCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQW55SW50ICAgICAg
ICAgICAgID0gU3BlY0ludDMyT25seSB8IFNwZWNJbnQ1Mk9ubHk7IC8vIEl0J3Mgc29tZXRoaW5n
IHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50IGFyaXRobWV0aWMgb24uCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFzRG91YmxlICAgICA9IDF1IDw8IDI0OyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdSA8PCAyNTsgLy8g
SXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1MiBidXQgaXQncyBhIHJlYWwgbnVtYmVyIGFuZCBp
dCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJbnRBc0Rv
dWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0
J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25J
bnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3OyAvLyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIElu
dDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5kIGl0J3MgYSBkb3VibGUuCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVJlYWwgICAgICAgICA9IFNwZWNOb25JbnRBc0Rv
dWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgbm9uLU5hTiBk
b3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAg
ICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFn
IChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1
cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgTmFOIHRoYXQgaXMgdW5z
YWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxsIDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBO
YU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdWxsIDw8IDI5OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUgdG8gdGFnIChpLmUuIGltcHVyZSkuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZU5hTiAgICAgICAgICA9IFNwZWNEb3VibGVQ
dXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5hTjsgLy8gSXQncyBkZWZpbml0ZWx5IHNvbWUga2lu
ZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlRG91Ymxl
ICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZVB1cmVOYU47IC8vIEl0J3MgZWl0aGVy
IGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUsIGJ1dCBpdCdzIGRlZmluaXRlbHkgbm90IGltcHVy
ZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxEb3VibGUgICAgICAg
ICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZU5hTjsgLy8gSXQncyBlaXRoZXIgYSBub24t
TmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgxLDEyICs4MywxMiBAQCBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRG91YmxlUmVhbDsgLy8gSXQn
cyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGVSZWFsLCBvciBhIEludDUyLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJlciAgICAgPSBTcGVjSW50MzJPbmx5
IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJs
ZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IFNwZWNBbnlJbnQgfCBTcGVj
RnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwg
YW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICA9IDF1IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAg
ICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVu
ZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAg
ICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0gMXVsbCA8PCAzMTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gU3BlY0Jvb2xlYW4gfCBT
cGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBV
bmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0hlYXBUb3AgICAgICAg
ICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0IGNh
biBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9ubHkgYW5kIFNwZWNE
b3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1ByaW1pdGl2
ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5vbi1PYmplY3QgSlNWYWx1ZS4KLXN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXUgPDwgMzA7IC8vIEl0
J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMzI7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IFNwZWNIZWFwVG9wIHwgU3BlY0VtcHR5OyAvLyBJ
dCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50NTJPbmx5IGFuZCBT
cGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNwb25kcyB0byB3aGF0IGNvdWxkIGJlIGZvdW5kIGlu
IGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxU
b3AgICAgICAgICAgICA9IFNwZWNCeXRlY29kZVRvcCB8IFNwZWNGdWxsTnVtYmVyOyAvLyBJdCBj
YW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29kZSBjb3VsZCBzZWUgcGx1cyBleG90aWMgZW5jb2Rp
bmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYgKzk3NywyMCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgSlNNYXBIYXNoOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ludDMy
T25seSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdldEpTTWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFw
aCwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSXNOb25FbXB0eUpT
TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNKU0FycmF5
OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0yODgzLDcgKzI4OTcsNiBAQCB0ZW1wbGF0ZTx0
eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewogICAgIE5v
ZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgCiAgICAg
c3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4
ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MTM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAg
ICAgIAorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGtl
eSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOwor
ICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChKU01hcEhhc2gsIGtleSk7CisgICAgICAg
IE5vZGUqIGJ1Y2tldCA9IGFkZFRvR3JhcGgoR2V0SlNNYXBCdWNrZXQsIEVkZ2UobWFwLCBNYXBP
YmplY3RVc2UpLCBFZGdlKGtleSksIEVkZ2UoaGFzaCkpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBhZGRUb0dyYXBoKExvYWRGcm9tSlNNYXBCdWNrZXQsIE9wSW5mbygpLCBPcEluZm8ocHJlZGlj
dGlvbiksIGJ1Y2tldCk7CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFu
ZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGNhc2UgSlNT
ZXRIYXNJbnRyaW5zaWM6CisgICAgY2FzZSBKU01hcEhhc0ludHJpbnNpYzogeworICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwT3JTZXQg
PSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAg
ICAgICAgTm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lz
dGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKEpTTWFwSGFzaCwg
a2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50
cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOworICAgICAgICBOb2RlKiBidWNr
ZXQgPSBhZGRUb0dyYXBoKEdldEpTTWFwQnVja2V0LCBPcEluZm8oMCksIEVkZ2UobWFwT3JTZXQs
IHVzZUtpbmQpLCBFZGdlKGtleSksIEVkZ2UoaGFzaCkpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBhZGRUb0dyYXBoKElzTm9uRW1wdHlKU01hcEJ1Y2tldCwgYnVja2V0KTsKKyAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTI0Myw2ICsxMjQzLDI3IEBAIHZvaWQgY2xvYmJlcml6ZShH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIExvZ1NoYWRvd0NoaWNrZW5UYWlsOgog
ICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIEpT
TWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEdldEpTTWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7Cisg
ICAgICAgIEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSYga2V5
RWRnZSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwQnVj
a2V0SW5kZXhMb2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGtleUVkZ2UpLCBMYXp5Tm9kZShub2Rl
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0
OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIGJ1Y2tldEVkZ2Ug
PSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEdldExvYywg
TWlzY0ZpZWxkcywgYnVja2V0RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKKyAgICAgICAgcmVhZChN
aXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEhhc0xvYywgTWlzY0Zp
ZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsK
ICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNH
Qy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTAgQEAgYm9vbCBkb2VzR0Mo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNh
c2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAg
IGNhc2UgSlNNYXBIYXNoOgorICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2Fk
RnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgogICAgIGNh
c2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNl
IENoZWNrVGllclVwSW5Mb29wOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdF
ZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0YXRp
YyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDc7IH0KKyAgICBzdGF0aWMgdWludDMyX3Qgc2hp
ZnQoKSB7IHJldHVybiA4OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChO
b2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBLaWxs
U3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewpAQCAtMTk3LDggKzE5NywyMSBAQCBwcml2YXRlOgog
ICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
bm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4gc2hpZnQo
KSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NFUlQodXNl
S2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VSVCgoc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVlIHwg
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChr
aWxsU3RhdHVzKSA8PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjppc1Byb3ZlZChw
cm9vZlN0YXR1cykpOworICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFz
dFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IHNoaWZ0KCkp
KTsKKyAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykg
PDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMp
KTsKKyAgICAgICAgdW5pb24gRm9vIHsKKyAgICAgICAgICAgIEZvbygpIHsgd29yZCA9IDA7IH0K
KyAgICAgICAgICAgIHVpbnRwdHJfdCB3b3JkOworICAgICAgICAgICAgRWRnZSBlZGdlOworICAg
ICAgICB9IHU7CisgICAgICAgIHUud29yZCA9IHJlc3VsdDsKKyAgICAgICAgRWRnZSByZXN1bHRF
ZGdlID0gdS5lZGdlOworICAgICAgICBVTlVTRURfUEFSQU0ocmVzdWx0RWRnZSk7CisgICAgICAg
IEFTU0VSVChyZXN1bHRFZGdlLnVzZUtpbmRVbmNoZWNrZWQoKSA9PSB1c2VLaW5kKTsKKyAgICAg
ICAgQVNTRVJUKHJlc3VsdEVkZ2Uubm9kZSgpID09IG5vZGUpOworICAgICAgICBBU1NFUlQocmVz
dWx0RWRnZS5wcm9vZlN0YXR1c1VuY2hlY2tlZCgpID09IHByb29mU3RhdHVzKTsKKyAgICAgICAg
QVNTRVJUKHJlc3VsdEVkZ2Uua2lsbFN0YXR1c1VuY2hlY2tlZCgpID09IGtpbGxTdGF0dXMpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICNlbHNlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIwNTEzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE1NDUsNiArMTU0NSwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgICAgICAgICAg
aWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAg
ICAgICAgZml4RWRnZTxNYXBPYmplY3RVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2JqZWN0VXNlKQorICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8U2V0T2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAg
ICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAgZml4RWRn
ZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgorICAgICAgICAgICAgZml4RWRnZTxL
bm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYg
IUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUg
dG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bj
b2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKQEAgLTE2MTYsNiArMTYzNSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhpczoKICAgICAgICAgY2FzZSBHZXRC
eVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIENvbXBhcmVFcVB0cjoKKyAgICAgICAgY2FzZSBK
U01hcEhhc2g6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
YnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRp
b24uY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsMTUgQEAgdm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIExvYwogICAgIGNhc2UgUmVnRXhwT2Jq
ZWN0TGFzdEluZGV4TG9jOgogICAgICAgICBvdXQucHJpbnQoIlJlZ0V4cE9iamVjdExhc3RJbmRl
eExvYyIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01hcEJ1Y2tldEluZGV4TG9jOgor
ICAgICAgICBvdXQucHJpbnQoIkpTTWFwQnVja2V0SW5kZXhMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNNYXBHZXRMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBIYXNMb2M6CisgICAgICAgIG91dC5w
cmludCgiSlNNYXBIYXNMb2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3
ICs1OCwxMCBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgU3RydWN0dXJlTG9jLAogICAgIFR5
cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFN0YWNrTG9jLAotICAgIFN0YWNrUGF5bG9hZExv
YworICAgIFN0YWNrUGF5bG9hZExvYywKKyAgICBKU01hcEJ1Y2tldEluZGV4TG9jLAorICAgIEpT
TWFwR2V0TG9jLAorICAgIEpTTWFwSGFzTG9jCiB9OwogCiBjbGFzcyBIZWFwTG9jYXRpb24gewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDIwNTEzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDE5LDYgKzE0MTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKICAg
ICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhwOgogICAgICAgICBjYXNlIFRvTnVtYmVyOgor
ICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDIwNTEzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMzg4LDcgKzM4OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3Vs
dEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVyZVBuYW1lLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvckdlbmVyaWNQ
bmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAotICAgIG1hY3JvKFRvSW5k
ZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKKyAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVz
dWx0SlMpIFwKKyAgICAvKiBIYXNoaW5nIGZvciBKU01hcCAqLyBcCisgICAgbWFjcm8oSlNNYXBI
YXNoLCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhHZXRKU01hcEJ1Y2tldCwgTm9kZVJl
c3VsdEpTKSBcCisgICAgbWFjcm8oTG9hZEZyb21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBc
CisgICAgbWFjcm8oSXNOb25FbXB0eUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAog
CiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZv
ciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0g
dG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgor
I2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0xNzkxLDYg
KzE3OTMsMzQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYQogICAg
IHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUodmFsdWUpLCBzbG90KTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkpTTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGlucHV0KQoreworICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIGV4ZWMpOworCisgICAgcmV0dXJuIGpzTWFwSGFzaChleGVjLCBub3JtYWxpemVNYXBLZXko
SlNWYWx1ZTo6ZGVjb2RlKGlucHV0KSkpOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSlNNYXBGaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29k
ZWRKU1ZhbHVlIGtleSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU01hcDo6QnVja2V0VHlwZSoq
IGJ1Y2tldCA9IGpzQ2FzdDxKU01hcCo+KG1hcCktPmZpbmRCdWNrZXQoZXhlYywgSlNWYWx1ZTo6
ZGVjb2RlKGtleSkpOworICAgIGlmICghYnVja2V0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICByZXR1cm4gKmJ1Y2tldDsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkpTU2V0RmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbWFwLCBFbmNvZGVkSlNW
YWx1ZSBrZXkpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNr
ZXQgPSBqc0Nhc3Q8SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29k
ZShrZXkpKTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
cmV0dXJuICpidWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4
aXQpCiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3
aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDIsNiArMTQyLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJy
YXkKIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0
YXRlKiwgSlNTdHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmds
ZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAoraW50MzJfdCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkpTTWFwSGFzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBpbnB1
dCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0KEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlKTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBv
cGVyYXRpb25KU1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFs
dWUpOworCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4
ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJlKik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0YXRlKiwgSlNDZWxsKik7CiBKU0NlbGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmcoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MTEsNiArNzExLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBH
ZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAg
ICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgorICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBC
dWNrZXQ6CiAgICAgICAgIGNhc2UgVG9OdW1iZXI6IHsKICAgICAgICAgICAgIHNldFByZWRpY3Rp
b24obV9jdXJyZW50Tm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTc0MSw2ICs3NDIsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKKyAgICAgICAgY2FzZSBKU01hcEhhc2g6CisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0
SlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKKyAgICAg
ICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisK
ICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA1MTM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgog
ICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFJlZ0V4cE9iamVjdFVz
ZToKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNl
OgogICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nSWRl
bnRVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMzU1LDYgKzM1NywxMCBAQCBib29s
IHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXREeW5hbWlj
VmFyOgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAgICBjYXNlIFJlc29sdmVTY29wZToKKyAg
ICBjYXNlIEpTTWFwSGFzaDoKKyAgICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTRW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5j
bHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKQEAgLTQ3LDYgKzQ4LDggQEAKICNpbmNsdWRlICJU
eXBlUHJvZmlsZXJMb2cuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogCisjaW5jbHVkZSAiTWFj
cm9Bc3NlbWJsZXJQcmludGVyLmgiCisKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC00NjE1LDYgKzQ2MTgsMTMyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisg
ICAgY2FzZSBKU01hcEhhc2g6IHsKKyAgICAgICAgY29tcGlsZUpTTWFwSGFzaChub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0SlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3Vs
YXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBHUFJU
ZW1wb3JhcnkgbWFzayh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGluZGV4KHRoaXMpOwor
ICAgICAgICBHUFJUZW1wb3JhcnkgYnVmZmVyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
YnVja2V0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAg
ICAgIEdQUlJlZyBoYXNoR1BSID0gaGFzaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1hcEdQUiA9
IG1hcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1hc2tHUFIgPSBtYXNrLmdwcigpOworICAgICAg
ICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJ1ZmZlckdQ
UiA9IGJ1ZmZlci5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIo
KTsKKyAgICAgICAgR1BSUmVnIGtleUdQUiA9IGtleS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChu
b2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZVNldE9iamVj
dChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobWFwR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoSlNNYXAs
IG1fbWFwKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhidWZmZXJHUFIsIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4sIG1fY2FwYWNpdHkpKSwgbWFza0dQUik7Cisg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBP
QkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0
YUtleT4+LCBtX2J1ZmZlcikpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVz
dGVkSW1tMzIoMSksIG1hc2tHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGhhc2hHUFIsIGluZGV4
R1BSKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVs
KCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IGxvb3BBcm91bmQ7CisKKyAgICAgICAgbV9qaXQuYW5kMzIobWFza0dQUiwg
aW5kZXhHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXgoYnVmZmVyR1BSLCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBidWNr
ZXRHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGJ1Y2tldEdQUiwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgYXV0byBub3RQcmVzZW50SW5UYWJsZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIAorICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSk7
CisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6RXF1YWwsIAorICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkp
KSk7CisKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tl
dEdQUiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkp
LCBidWNrZXRHUFIpOworCisgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAg
ZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRH
UFIsIGtleUdQUikpOyAvLyBUaGV5J3JlIGRlZmluaXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdlIGZv
dW5kIHRoZSBidWNrZXQgd2Ugd2VyZSBsb29raW5nIGZvciEKKyAgICAgICAgYXV0byBvbmVJc250
Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKTsKKyAg
ICAgICAgLy8gZmlyc3QgaXMgYSBjZWxsIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5k
KG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhrZXlHUFIpKSk7CisgICAgICAgIC8v
IEJvdGggYXJlIGNlbGxzIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJy
YW5jaDgoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYnVja2V0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZElt
bTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZyBoZXJl
LgorICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVy
OjpFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGtleUdQUiwgSlNDZWxs
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAg
ICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcsIGJ1dCB0aGUgc2Vjb25kIGlzIG5vdCwgd2Ug
Y29udGludWUgdG8gbG9vcCBhcm91bmQuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CisKKyAgICAgICAgb25lSXNudENlbGwubGluaygmbV9qaXQpOworICAgICAgICAv
LyBXZSd2ZSBhbHJlYWR5IGRvbmUgYSA2NC1iaXQgY29tcGFyZSBhdCB0aGlzIHBvaW50LCBzbyBp
ZiBvbmUgaXMgbm90IGEgbnVtYmVyLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVxdWFsLgorICAg
ICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihidWNrZXRHUFIp
KTsKKyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoa2V5
R1BSKSk7CisgICAgICAgIC8vIEJvdGggYXJlIGRlZmluaXRlbHkgbnVtYmVycy4gSWYgd2Ugc2Vl
IGEgZG91YmxlLCB3ZSBnbyB0byB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzbG93UGF0aENhc2Vz
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGJ1Y2tldEdQUikpOworICAgICAgICBzbG93
UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGtleUdQUikpOworICAgICAg
ICAKKyAgICAgICAgbG9vcEFyb3VuZC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmFkZDMy
KFRydXN0ZWRJbW0zMigxKSwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5qdW1wKCkubGlua1Rv
KGxvb3AsICZtX2ppdCk7CisKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgLy8gRklY
TUU6IHdlJ3ZlIGFscmVhZHkgaGFzaGVkLCBsZXRzIGp1c3QgcGFzcyBpbiBhbGwgdGhlIHN0YXRl
IHRvIHRoZSBmaW5kQnVja2V0IGZ1bmN0aW9uLgorICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNr
ZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RQcmVzZW50SW5UYWJs
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRy
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBMb2FkRnJvbUpTTWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1
Y2tldCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdEJ1
Y2tldCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQ
Uik7CisgICAgICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRH
UFIsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFs
dWUoKSksIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKwor
ICAgICAgICBub3RCdWNrZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBJc05vbkVtcHR5SlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIG1faml0LmNv
bXBhcmVQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRHUFIsIFRydXN0ZWRJbW0z
MigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVG
YWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBub2Rl
LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2Fz
ZSBJc09iamVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1c2UsIHZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYxMyw2ICszNjEzLDUzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJc0pTQXJyYXkoTm8KICAgICBibGVzc2VkQm9v
bGVhblJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlSlNNYXBIYXNoKE5vZGUqIG5vZGUpCit7CisgICAgLy8gRklYTUU6IHdlIGFyZSBjdXJy
ZW50bHkgc2xvd2VyIGluIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgdG8gY2FsbCBpbnRvIEMgdG8g
aGFzaCB0aGUgc3RyaW5nLgorICAgIC8vIFdlIHNob3VsZCBoYXZlIGEgc3RyaW5nIGFyZ3VtZW50
IGZhc3QgcGF0aCB0aGF0IGF2b2lkcyBjaGVja3MhCisKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9
PSBKU01hcEhhc2gpOworCisgICAgSlNWYWx1ZU9wZXJhbmQgaW5wdXQodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7CisKKyAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVt
cC5ncHIoKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzdHJhaWdodEhhc2g7Cisg
ICAgYXV0byBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBzdHJhaWdodEhhc2guYXBw
ZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0
ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoaW5wdXRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIp
OworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocmVzdWx0R1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwgcmVzdWx0R1BSKTsK
KyAgICBtX2ppdC51cnNoaWZ0NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgcmVz
dWx0R1BSKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICBhdXRvIGRvbmUyID0gbV9qaXQuanVtcCgp
OworCisgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5k
KG1faml0LmJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSk7CisgICAgc3RyYWlnaHRIYXNoLmFw
cGVuZChtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzKGlucHV0R1BSKSkpOworICAgIHNs
b3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgc3RyYWlnaHRIYXNoLmxpbmsoJm1f
aml0KTsKKyAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgIG1faml0Lmpz
TWFwSGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOworICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAo
KTsKKworICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lz
dGVycyhyZXN1bHRHUFIpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBIYXNoLCBy
ZXN1bHRHUFIsIGlucHV0R1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7CisgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgIGRvbmUyLmxpbmsoJm1faml0
KTsKKyAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICBpbnQzMlJlc3VsdChyZXN1bHRHUFIsIG5v
ZGUpOworfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSXNSZWdFeHBPYmplY3QoTm9k
ZSogbm9kZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CkBAIC03MzgxLDYgKzc0MjgsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRl
UmVnRXhwT2JqZQogICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigp
KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRn
ZSwgR1BSUmVnIGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3Bl
Y01hcE9iamVjdCwgSlNNYXBUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2Us
IFNwZWNNYXBPYmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBv
cGVyYW5kLmdwcigpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2Jq
ZWN0KEVkZ2UgZWRnZSwgR1BSUmVnIGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRn
ZSwgY2VsbCwgU3BlY1NldE9iamVjdCwgSlNTZXRUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlw
ZUNoZWNrKGVkZ2UsIFNwZWNTZXRPYmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZVNldE9i
amVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVj
ayhlZGdlLCBTcGVjT2JqZWN0IHwgU3BlY090aGVyKSkKQEAgLTc2NjgsNiArNzc0MywxMiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBSZWdFeHBP
YmplY3RVc2U6CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVj
dChlZGdlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAg
IHNwZWN1bGF0ZVNldE9iamVjdChlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmpl
Y3RPck90aGVyVXNlOgogICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOwogICAg
ICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTQgKzkzLDE0IEBA
IHByaXZhdGU6CiAgICAgLy8gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KICNpZiBVU0UoSlNWQUxV
RTY0KQogICAgIGVudW0gU3BpbGxPcmRlciB7Ci0gICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCA9
IDEsIC8vIG5vIHNwaWxsLCBhbmQgY2hlYXAgZmlsbAotICAgICAgICBTcGlsbE9yZGVyU3BpbGxl
ZCAgPSAyLCAvLyBubyBzcGlsbAotICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgPSA0LCAvLyBu
ZWVkcyBzcGlsbAotICAgICAgICBTcGlsbE9yZGVyQ2VsbCAgICAgPSA0LCAvLyBuZWVkcyBzcGls
bAotICAgICAgICBTcGlsbE9yZGVyU3RvcmFnZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAotICAgICAg
ICBTcGlsbE9yZGVySW50ZWdlciAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Ci0gICAgICAg
IFNwaWxsT3JkZXJCb29sZWFuICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKLSAgICAgICAg
U3BpbGxPcmRlckRvdWJsZSAgID0gNiwgLy8gbmVlZHMgc3BpbGwgYW5kIGNvbnZlcnQKKyAgICAg
ICAgU3BpbGxPcmRlckNvbnN0YW50ICA9IDEsIC8vIG5vIHNwaWxsLCBhbmQgY2hlYXAgZmlsbAor
ICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgID0gMiwgLy8gbm8gc3BpbGwKKyAgICAgICAgU3Bp
bGxPcmRlckpTICAgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCisgICAgICAgIFNwaWxsT3JkZXJD
ZWxsICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVyU3RvcmFnZSAg
ID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlckludGVnZXIgICA9IDUsIC8v
IG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4gICA9IDUsIC8v
IG5lZWRzIHNwaWxsIGFuZCBib3gKKyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgICA9IDYsIC8v
IG5lZWRzIHNwaWxsIGFuZCBjb252ZXJ0CiAgICAgfTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQp
CiAgICAgZW51bSBTcGlsbE9yZGVyIHsKQEAgLTUxOSw3ICs1MTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAvLyBUaGlzIGlzIHNwZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUgLSBh
cyBpbiBpdCdzIG5vdCB2aXNpYmxlIHRvIEpTCiAgICAgICAgICAgICAvLyBjb2RlLgogICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoaW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Io
c3BpbGxNZSkpOwotICAgICAgICAgICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERh
dGFGb3JtYXRTdG9yYWdlKTsKKyAgICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGls
bE1lLCBzcGlsbEZvcm1hdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAt
NzU2LDYgKzc1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVJbnN0YW5jZU9mQ3VzdG9t
KE5vZGUqKTsKIAogICAgIHZvaWQgY29tcGlsZUlzSlNBcnJheShOb2RlKik7CisgICAgdm9pZCBj
b21waWxlSlNNYXBIYXNoKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJc1JlZ0V4cE9iamVjdChO
b2RlKik7CiAgICAgdm9pZCBjb21waWxlSXNUeXBlZEFycmF5VmlldyhOb2RlKik7CiAKQEAgLTEx
OTcsNiArMTE5OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3Bl
cmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKENfSklUT3BlcmF0aW9uX0VDSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBh
cmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRUNJWkMgb3BlcmF0aW9uLCBHUFJSZWcgcmVnT3Ax
LCBVbmlxdWVkU3RyaW5nSW1wbCogaWRlbnRPcDIsIGludDMyX3Qgb3AzLCBHUFJSZWcgcmVnT3A0
KQogICAgIHsKQEAgLTE2NzEsNiArMTY3NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBh
cHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2Fs
bE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQ
UlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbiha
X0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEs
IHVuc2lnbmVkIGFyZzIsIHVuc2lnbmVkIGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpLCBUcnVzdGVk
SW1tMzIoYXJnMykpOwpAQCAtMjY1Niw2ICsyNjY4LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2JqZWN0
KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChFZGdl
KTsKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0
ZU1hcE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmpl
Y3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSwgR1BSUmVnIGNlbGwp
OwogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1
bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVN0
cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2UoRWRnZSBlZGdlLCBHUFJSZWcgc3RyaW5nLCBHUFJSZWcg
c3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2lu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAg
ICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TWFwT2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk1hcE9iamVjdFVzZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIG91dC5wcmludCgiU2V0
T2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6
CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOwogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMjA1MTM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDYgKzYzLDggQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93blN0cmluZ1VzZSwK
ICAgICBLbm93blByaW1pdGl2ZVVzZSwgLy8gVGhpcyBiaXphcnJlIHR5cGUgYXJpc2VzIGZvciBv
cF9zdHJjYXQsIHdoaWNoIGhhcyBhIGJ5dGVjb2RlIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgb25s
eSBzZWUgcHJpbWl0aXZlcyAoaS5lLiBub3Qgb2JqZWN0cykuCiAgICAgU3ltYm9sVXNlLAorICAg
IE1hcE9iamVjdFVzZSwKKyAgICBTZXRPYmplY3RVc2UsCiAgICAgU3RyaW5nT2JqZWN0VXNlLAog
ICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5vdFN0cmluZ1ZhclVzZSwKQEAgLTEz
NCw2ICsxMzYsMTAgQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwog
ICAgICAgICByZXR1cm4gU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdDsKICAgICBjYXNlIFN5bWJv
bFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNTeW1ib2w7CisgICAgY2FzZSBNYXBPYmplY3RVc2U6
CisgICAgICAgIHJldHVybiBTcGVjTWFwT2JqZWN0OworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgor
ICAgICAgICByZXR1cm4gU3BlY1NldE9iamVjdDsKICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToK
ICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdPclN0cmlu
Z09iamVjdFVzZToKQEAgLTIyMSw2ICsyMjcsOCBAQCBpbmxpbmUgYm9vbCBpc0NlbGwoVXNlS2lu
ZCBraW5kKQogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgog
ICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgY2FzZSBNYXBPYmplY3RVc2U6
CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0FycmF5
TW9kZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkluZGV4aW5n
VHlwZS5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKIApAQCAtMTAyLDcgKzEwMywxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0dXJlOjpjbGFzc0luZm9P
ZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9nbG9iYWxPYmplY3QsIFN0cnVjdHVyZTo6
Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfcHJvdG90eXBlLCBT
dHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSBcCi0gICAgbWFjcm8oU3RydWN0dXJlX3N0cnVj
dHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCisgICAgbWFjcm8oU3RydWN0
dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpIFwKKyAgICBt
YWNybyhKU01hcF9IYXNoTWFwSW1wbCwgT0JKRUNUX09GRlNFVE9GKEpTTWFwLCBtX21hcCkpIFwK
KyAgICBtYWNybyhIYXNoTWFwSW1wbF9jYXBhY2l0eSwgT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiwgbV9jYXBhY2l0eSkpIFwK
KyAgICBtYWNybyhIYXNoTWFwSW1wbF9idWZmZXIsICBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcElt
cGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+LCBtX2J1ZmZlcikpIFwKKyAg
ICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0
X2tleSwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZL
ZXkoKSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykg
XAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA1MTM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiAKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgY2FzZSBV
bnJlYWNoYWJsZToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIEpTTWFwSGFzaDoKKyAg
ICBjYXNlIEdldEpTTWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAg
ICBjYXNlIElzTm9uRW1wdHlKU01hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2Fz
ZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTQ3NSw2ICs0NzksOCBAQCBD
YXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAg
Y2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmlu
Z09iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAgICAg
ICAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIFNldE9iamVjdFVz
ZToKICAgICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAgICAg
IGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTm90Q2VsbFVzZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk9w
ZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDE4IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgpOwog
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSlNNYXBIYXNoOgorICAgICAgICAgICAg
Y29tcGlsZUpTTWFwSGFzaCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0
SlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0SlNNYXBCdWNrZXQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAg
ICAgICBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSXNOb25FbXB0eUpTTWFwQnVja2V0OgorICAgICAgICAgICAgY29tcGlsZUlz
Tm9uRW1wdHlKU01hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
SXNPYmplY3Q6CiAgICAgICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNjM1NSw2ICs2MzY4LDIyOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAor
ICAgIHZvaWQgY29tcGlsZUpTTWFwSGFzaCgpCisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlz
Q2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxs
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzdHJhaWdodEhhc2ggPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc051bWJlckNhc2UgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBub25FbXB0eVN0cmluZ0Nhc2UgPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9j
aygpOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJl
KG5vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CisgICAgICAgIExWYWx1ZSBpc1N0cmluZyA9
IG1fb3V0LmVxdWFsKG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90
eXBlSW5mb1R5cGUpLCBtX291dC5jb25zdEludDMyKFN0cmluZ1R5cGUpKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgaXNTdHJpbmcsIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1
bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdD
YXNlLCBub25FbXB0eVN0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1f
b3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFsdWUpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVhbChzdHJpbmdJbXBsLCBtX291dC5jb25z
dEludFB0cigwKSksIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkobm9uRW1wdHlTdHJpbmdDYXNl
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRW1wdHlTdHJpbmdDYXNlLCBub3RDZWxs
KTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBtX291dC5sU2hyKG1fb3V0LmxvYWQzMihzdHJpbmdJ
bXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwgbV9vdXQuY29uc3RJbnQzMig2
KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2gs
IG1fb3V0LmNvbnN0SW50MzIoMCkpLAorICAgICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1
YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsLCBp
c051bWJlckNhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc051bWJl
cih2YWx1ZSksIHVuc3VyZShpc051bWJlckNhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNOdW1iZXJDYXNlLCBzdHJhaWdodEhhc2gpOworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0ludDMyKHZhbHVlKSwgdW5zdXJlKHN0
cmFpZ2h0SGFzaCksIHVuc3VyZShzbG93Q2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHN0cmFpZ2h0SGFzaCwgc2xvd0Nhc2UpOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIp
OworICAgICAgICBMVmFsdWUga2V5ID0gdmFsdWU7CisgICAgICAgIExWYWx1ZSB0ZW1wID0ga2V5
OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzIpKTsK
KyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQu
YWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAg
dGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJ
bnQzMigyMikpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAg
ICAgLy8ga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAg
dGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDEzKSk7CisgICAgICAgIHRl
bXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRl
bXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiA4KTsKKyAgICAgICAgdGVtcCA9IGtleTsK
KyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMig4KSk7Cisg
ICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0g
KGtleSA8PCAzKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNo
bCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtl
eSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICAgICAgdGVtcCA9
IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigx
NSkpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8g
a2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9
IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDI3KSk7CisgICAgICAgIHRlbXAgPSBt
X291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOwor
ICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAg
ICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKKyAgICAg
ICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmNh
c3RUb0ludDMyKGtleSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihrZXkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoCisgICAgICAgICAgICB2bUNh
bGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25KU01hcEhhc2gpLCBtX2NhbGxGcmFt
ZSwgdmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRJbnQz
MihtX291dC5waGkoSW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQsIG5vbkVtcHR5U3RyaW5n
SGFzaFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldEpTTWFwQnVja2V0KCkK
KyAgICB7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBub3RQcmVzZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEVtcHR5VmFsdWUgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBub3REZWxldGVkVmFsdWUgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleU5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBib3RoQXJlQ2VsbHMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzTnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgYm90aEFyZU51bWJlcnMgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc0ludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAg
ICAgICBMVmFsdWUgbWFwOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgbWFwID0gbG93TWFwT2JqZWN0KG1fbm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICBlbHNlIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBtYXAgPSBsb3dTZXRPYmplY3QobV9ub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICAgICAgTFZhbHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGls
ZDIoKSk7CisgICAgICAgIExWYWx1ZSBoYXNoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDMoKSk7
CisKKyAgICAgICAgTFZhbHVlIGhhc2hNYXBJbXBsID0gbV9vdXQubG9hZFB0cihtYXAsIG1faGVh
cHMuSlNNYXBfSGFzaE1hcEltcGwpOworICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9h
ZFB0cihoYXNoTWFwSW1wbCwgbV9oZWFwcy5IYXNoTWFwSW1wbF9idWZmZXIpOworICAgICAgICBM
VmFsdWUgbWFzayA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIoaGFzaE1hcEltcGwsIG1faGVhcHMu
SGFzaE1hcEltcGxfY2FwYWNpdHkpLCBtX291dC5pbnQzMk9uZSk7CisKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgaW5kZXhTdGFydCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQu
anVtcChsb29wU3RhcnQpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8obG9vcFN0YXJ0LCBub3RFbXB0eVZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHVubWFz
a2VkSW5kZXggPSBtX291dC5waGkoSW50MzIsIGluZGV4U3RhcnQpOworICAgICAgICBMVmFsdWUg
aW5kZXggPSBtX291dC5iaXRBbmQobWFzaywgdW5tYXNrZWRJbmRleCk7CisgICAgICAgIExWYWx1
ZSBoYXNoTWFwQnVja2V0ID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnBy
b3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgYnVmZmVyLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2
NCksIFNjYWxlRWlnaHQpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0g
bV9vdXQuYW5jaG9yKGhhc2hNYXBCdWNrZXQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
ZXF1YWwoaGFzaE1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoSGFzaE1hcEltcGw8SGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjplbXB0eVZhbHVlKCkpKSwKKyAgICAgICAg
ICAgIHVuc3VyZShub3RQcmVzZW50SW5UYWJsZSksIHVuc3VyZShub3RFbXB0eVZhbHVlKSk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90RW1wdHlWYWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNv
bnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+
Pjo6ZGVsZXRlZFZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5z
dXJlKG5vdERlbGV0ZWRWYWx1ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERlbGV0
ZWRWYWx1ZSwgbm90Qml0RXF1YWwpOworICAgICAgICBMVmFsdWUgYnVja2V0S2V5ID0gbV9vdXQu
bG9hZDY0KGhhc2hNYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF9rZXkpOworICAgICAg
ICAvLyBQZXJmb3JtIE9iamVjdC5pcygpCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVh
bChrZXksIGJ1Y2tldEtleSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKG5vdEJpdEVxdWFsKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWws
IGJ1Y2tldEtleUlzQ2VsbCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYnVja2V0S2V5
KSwKKyAgICAgICAgICAgIHVuc3VyZShidWNrZXRLZXlJc0NlbGwpLCB1bnN1cmUoYnVja2V0S2V5
Tm90Q2VsbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwgYm90
aEFyZUNlbGxzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChrZXkpLAorICAgICAgICAg
ICAgdW5zdXJlKGJvdGhBcmVDZWxscyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oYm90aEFyZUNlbGxzLCBidWNrZXRLZXlJc1N0cmluZyk7CisgICAgICAg
IG1fb3V0LmJyYW5jaChpc1N0cmluZyhidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1
Y2tldEtleUlzU3RyaW5nKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhidWNrZXRLZXlJc1N0cmluZywgYnVja2V0S2V5Tm90Q2VsbCk7CisgICAgICAgIG1f
b3V0LmJyYW5jaChpc1N0cmluZyhrZXkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwg
dW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlO
b3RDZWxsLCBidWNrZXRLZXlJc051bWJlcik7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE51
bWJlcihidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUo
YnVja2V0S2V5SXNOdW1iZXIpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJ
c051bWJlciwgYm90aEFyZU51bWJlcnMpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1i
ZXIoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKGJvdGhBcmVO
dW1iZXJzKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm90aEFyZU51bWJlcnMsIGJ1Y2tl
dEtleUlzSW50MzIpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihidWNrZXRLZXkp
LAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGJ1Y2tldEtleUlzSW50MzIp
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0ludDMyLCBsb29wQXJvdW5k
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoa2V5KSwKKyAgICAgICAgICAgIHVu
c3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obG9vcEFyb3VuZCwgc2xvd1BhdGgpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1Rv
UGhpKHVubWFza2VkSW5kZXgsIG1fb3V0LmFuY2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0Lmlu
dDMyT25lKSkpOworICAgICAgICBtX291dC5qdW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc2xvd1BhdGgsIG5vdFByZXNlbnRJblRhYmxlKTsKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc2xvd1BhdGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBl
KCksCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24obV9ub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gTWFwT2JqZWN0VXNlID8gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0IDogb3BlcmF0aW9u
SlNTZXRGaW5kQnVja2V0KSwgbV9jYWxsRnJhbWUsIG1hcCwga2V5KSk7CisgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RQcmVzZW50
SW5UYWJsZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90UHJlc2Vu
dFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fb3V0LnBoaShwb2ludGVy
VHlwZSgpLCBidWNrZXRSZXN1bHQsIHNsb3dQYXRoUmVzdWx0LCBub3RQcmVzZW50UmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgpCisgICAgewor
ICAgICAgICBMVmFsdWUgbWFwQnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGhhc0J1Y2tldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgbm9CdWNrZXRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKworICAgICAgICBt
X291dC5icmFuY2gobV9vdXQuZXF1YWwobWFwQnVja2V0LCBtX291dC5jb25zdEludFB0cigwKSks
CisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGhhc0J1Y2tldCkpOwor
CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaGFzQnVja2V0
LCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBidWNrZXRSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQubG9hZDY0KG1hcEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0
X3ZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1
ZShtX291dC5waGkoSW50NjQsIG5vQnVja2V0UmVzdWx0LCBidWNrZXRSZXN1bHQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGNvbXBpbGVJc05vbkVtcHR5SlNNYXBCdWNrZXQoKQorICAgIHsKKyAgICAg
ICAgTFZhbHVlIGJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0Lm5vdEVxdWFsKGJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQ
dHIoMCkpOworICAgICAgICBzZXRCb29sZWFuKHJlc3VsdCk7CisgICAgfQorCiAgICAgdm9pZCBj
b21waWxlSXNPYmplY3RPck51bGwoKQogICAgIHsKICAgICAgICAgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFu
dGljKTsKQEAgLTk5MzYsNiArMTAxNzEsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRl
UmVnRXhwT2JqZWN0KGVkZ2UsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQorCisgICAgTFZhbHVlIGxvd01hcE9iamVjdChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0
KGVkZ2UsIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTFZh
bHVlIGxvd1NldE9iamVjdChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gbG93Q2VsbChlZGdlKTsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBsb3dT
dHJpbmcoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNP
cGVyYW5kU3BlY3VsYXRpb24pCiAgICAgewpAQCAtMTAwNTksNiArMTAzMDgsMTcgQEAgcHJpdmF0
ZToKICAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBMVmFsdWUgbG93TWFwQnVja2V0KEVkZ2UgZWRnZSkK
KyAgICB7CisgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX21hcEJ1Y2tldFZhbHVl
cy5nZXQoZWRnZS5ub2RlKCkpOworICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICBMVmFsdWUgc3Ry
aWN0SW50NTJUb0ludDMyKEVkZ2UgZWRnZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKQEAgLTEwMzYy
LDYgKzEwNjIyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgog
ICAgICAgICAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KGVkZ2UpOwogICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlTWFw
T2JqZWN0KGVkZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2V0T2JqZWN0
VXNlOgorICAgICAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UpOworICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgogICAgICAgICAgICAgc3BlY3VsYXRlU3Ry
aW5nKGVkZ2UpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDY5MCw2ICsxMDk1NiwyOCBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KGVkZ2UsIGxvd0Nl
bGwoZWRnZSkpOwogICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRn
ZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY01hcE9iamVjdCwgaXNOb3RUeXBlKGNl
bGwsIEpTTWFwVHlwZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVk
Z2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBsb3dDZWxs
KGVkZ2UpKTsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVkZ2Us
IExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAg
ICBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNTZXRPYmplY3QsIGlzTm90VHlwZShjZWxs
LCBKU1NldFR5cGUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdl
IGVkZ2UpCisgICAgeworICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwgbG93Q2VsbChl
ZGdlKSk7CisgICAgfQogICAgIAogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UgZWRnZSwg
TFZhbHVlIGNlbGwpCiAgICAgewpAQCAtMTE0NTgsNiArMTE3NDYsMTAgQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2
YWx1ZSwgbV9oaWdoQmxvY2spKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBCdWNrZXQoTm9kZSog
bm9kZSwgTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9tYXBCdWNrZXRWYWx1ZXMuc2V0
KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CisgICAgfQogICAg
IHZvaWQgc2V0RG91YmxlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAg
IG1fZG91YmxlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hC
bG9jaykpOwpAQCAtMTE0OTEsNiArMTE3ODMsMTAgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IHNldFN0b3JhZ2UobV9ub2RlLCB2YWx1ZSk7CiAgICAgfQorICAgIHZvaWQgc2V0TWFwQnVja2V0
KExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX25vZGUsIHZhbHVl
KTsKKyAgICB9CiAgICAgdm9pZCBzZXREb3VibGUoTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAg
ICAgc2V0RG91YmxlKG1fbm9kZSwgdmFsdWUpOwpAQCAtMTE2NzQsNiArMTE5NzAsNyBAQCBwcml2
YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fanNWYWx1ZVZhbHVl
czsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7
CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOwor
ICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fbWFwQnVja2V0VmFsdWVzOwog
ICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fZG91YmxlVmFsdWVzOwogICAg
IAogICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrLiBJdCBwcmV2ZW50cyBCMyBmcm9tIGhh
dmluZyB0byBkbyBDU0Ugb24gbG9hZGluZyBvZiBhcmd1bWVudHMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyMDUxMzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyNiw2ICs2MjYsNTAgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRE
dW1iVmlydHVhbENhbAogICAgICAgICB9KTsKIH0KIAordm9pZCBBc3NlbWJseUhlbHBlcnM6Ompz
TWFwSGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEdQ
UlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7
CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMy
KSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5w
dXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNo
KTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7CisgICAgeG9yNjQo
c2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZShp
bnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEzKSwgc2NyYXRjaCk7
CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8v
IGtleSBePSAoa2V5ID4+IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hp
ZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0
KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsK
KyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0
Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92ZShpbnB1dCwg
c2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNjcmF0Y2gpOworICAg
IHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAg
IG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigyNyksIHNj
cmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsK
KyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7Cisg
ICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0
Y2gsIGlucHV0KTsKKworICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpCisgICAg
dm9pZCogbWFzayA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PihV
SU5UX01BWCkpOworICAgIGFuZDY0KFRydXN0ZWRJbW1QdHIobWFzayksIGlucHV0QW5kUmVzdWx0
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lv
biAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFT
U0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSB8fCBK
SVRDb2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsK
ICAgICAgICAgfQogICAgIH0KKworICAgIHZvaWQganNNYXBIYXNoKEdQUlJlZyBpbnB1dEFuZFJl
c3VsdCwgR1BSUmVnIHNjcmF0Y2gpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkg
eyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5NCw2ICsxOTQsNyBAQCB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVS
QVRJT04gKkNfSklUT3BlCiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3Bl
cmF0aW9uX0VTdFpaKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqLCBpbnQzMl90LCBpbnQzMl90KTsK
IHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVopKEV4ZWNT
dGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9w
ZXJhdGlvbl9FSnNjSSkoRXhlY1N0YXRlKiwgSlNTY29wZSosIFVuaXF1ZWRTdHJpbmdJbXBsKik7
Cit0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VDSikoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9P
UEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklU
X09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fRykoSlNHbG9iYWxPYmplY3QqKTsKIHR5cGVkZWYg
ZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiSGFzaE1hcEltcGwuaCIKKworI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgor
I2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGU8PgorY29uc3QgQ2xhc3NJbmZv
IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQorICAgIHsgIkhh
c2hNYXBCdWNrZXQiLCAvKiBwYXJlbnQgY2xhc3MgaW5mbyAqLyBudWxscHRyLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OwordGVt
cGxhdGU8PgorY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIC8qIHBhcmVudCBjbGFz
cyBpbmZvICovIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxI
YXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPikgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+
Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0g
anNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVS
SVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHQp
OworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ByZXYpOworCisgICAgc3RhdGlj
X2Fzc2VydChzaXplb2YoRGF0YSkgJSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSA9PSAw
LCAiV2UgYXNzdW1lIHRoYXQgdGhlc2UgYXJlIGZpbGxlZCB3aXRoIFdyaXRlQmFycmllcjxVbmtu
b3duPiBtZW1iZXJzIG9ubHkuIik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9j
YXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2Yo
RGF0YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Cit9CisKK3RlbXBsYXRlPD4K
K2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5Pj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXk+PikgfTsKK3RlbXBsYXRlPD4KK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6c19pbmZvID0KKyAgICB7ICJI
YXNoTWFwSW1wbCIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4pIH07CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0Pgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
Pjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQorewor
ICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9oZWFkKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV90YWlsKTsKKworICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIE1hcEJh
Y2tpbmdTdG9yZUNvcHlUb2tlbiwgdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCksIHRoaXNPYmpl
Y3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1h
cEJ1Y2tldD4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3Rv
cmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQor
eworICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworCisg
ICAgSGFzaE1hcEltcGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsK
KyAgICBpZiAodG9rZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hl
Y2tJZlNob3VsZENvcHkodGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCkpKSB7CisgICAgICAgIEhh
c2hNYXBCdWZmZXJUeXBlKiBvbGRCdWZmZXIgPSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKTsK
KyAgICAgICAgc2l6ZV90IGJ1ZmZlclNpemVJbkJ5dGVzID0gdGhpc09iamVjdC0+YnVmZmVyU2l6
ZUluQnl0ZXMoKTsKKyAgICAgICAgSGFzaE1hcEJ1ZmZlclR5cGUqIG5ld0J1ZmZlciA9IHN0YXRp
Y19jYXN0PEhhc2hNYXBCdWZmZXJUeXBlKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGJ1ZmZl
clNpemVJbkJ5dGVzKSk7CisgICAgICAgIG1lbWNweShuZXdCdWZmZXIsIG9sZEJ1ZmZlciwgYnVm
ZmVyU2l6ZUluQnl0ZXMpOworICAgICAgICB0aGlzT2JqZWN0LT5tX2J1ZmZlci5zZXRXaXRob3V0
QmFycmllcihuZXdCdWZmZXIpOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkQnVmZmVyLCBi
dWZmZXJTaXplSW5CeXRlcyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIK
KyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IEhhc2hNYXBCdWNrZXREYXRhS2V5IHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5
OworfTsKKworc3RydWN0IEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWUgeworICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiBrZXk7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOworfTsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+CitjbGFzcyBIYXNoTWFwQnVja2V0IDogcHVibGlj
IEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBl
IHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1h
cEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCA9IERhdGE+CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0
eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFz
aE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hN
YXBCdWNrZXQqIGNyZWF0ZShWTSYgdm0pCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0KiBi
dWNrZXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNoTWFwQnVja2V0Pih2bS5oZWFw
KSkgSGFzaE1hcEJ1Y2tldCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGJ1Y2tl
dC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghYnVja2V0LT5u
ZXh0KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghYnVja2V0LT5wcmV2KCkpOworICAgICAg
ICByZXR1cm4gYnVja2V0OworICAgIH0KKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAg
ICBIYXNoTWFwQnVja2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dE5leHQoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICBtX25l
eHQuc2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0UHJldihWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIG1f
cHJldi5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldEtleShWTSYgdm0sIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgbV9kYXRhLmtl
eS5zZXQodm0sIHRoaXMsIGtleSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQg
PSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjpp
c19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgc2V0VmFs
dWUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9kYXRhLnZhbHVlLnNl
dCh2bSwgdGhpcywgdmFsdWUpOworICAgIH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERh
dGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXk+Ojp2YWx1ZT46OnR5cGUgc2V0VmFsdWUoVk0mLCBK
U1ZhbHVlKSB7IH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBrZXkoKSBjb25zdCB7IHJl
dHVybiBtX2RhdGEua2V5LmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERh
dGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3Nh
bWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlLCBKU1ZhbHVlPjo6dHlwZSB2
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fbmV4dC5nZXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCog
cHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsgfQorCisgICAgQUxXQVlTX0lOTElO
RSBib29sIGRlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0RGVsZXRlZChib29sIGRlbGV0ZWQpIHsgbV9kZWxldGVkID0gZGVsZXRl
ZDsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZktleSgpCisgICAgeworICAgICAg
ICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBCdWNrZXQsIG1fZGF0YSkgKyBPQkpFQ1Rf
T0ZGU0VUT0YoRGF0YSwga2V5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9
IERhdGE+CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxU
LCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWUsIHB0cmRpZmZfdD46OnR5cGUgb2Zm
c2V0T2ZWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hN
YXBCdWNrZXQsIG1fZGF0YSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgdmFsdWUpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBEYXRhIG1fZGF0YTsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1
Y2tldD4gbV9uZXh0OworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX3ByZXY7Cisg
ICAgYm9vbCBtX2RlbGV0ZWQgeyBmYWxzZSB9OworCit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
QnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBCdWZmZXIgeworcHVibGljOgorICAgIEhhc2hNYXBC
dWZmZXIoKSA9IGRlbGV0ZTsKKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodWlu
dDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4gY2FwYWNpdHkgKiBzaXplb2Yo
QnVja2V0VHlwZSopOworICAgIH0KKworICAgIEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCdWNrZXRUeXBlKio+KHRoaXMpOwor
ICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVmZmVyKiBjcmVhdGUoVk0mIHZtLCBKU0NlbGwq
IG93bmVyLCB1aW50MzJfdCBjYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY2F0
aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAg
ICAgdm9pZCogZGF0YSA9IG51bGxwdHI7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIo
dm0uaGVhcCk7CisgICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIs
IGFsbG9jYXRpb25TaXplLCAmZGF0YSkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyAgRklYTUU6IHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlLgorICAgICAgICBI
YXNoTWFwQnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyKj4oZGF0YSk7
CisgICAgICAgIG1lbXNldChidWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIHJl
dHVybiBidWZmZXI7CisgICAgfQorCit9OworCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGFy
ZUtleXNFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAg
IC8vIFdlIHdhbnQgKzAgYW5kIC0wIHRvIGJlIGNvbXBhcmVkIHRvIHRydWUgaGVyZS4gc2FtZVZh
bHVlKCkgaXRzZWxmIGRvZXNuJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhhdCwgaG93ZXZlciwgd2Ug
bm9ybWFsaXplIGFsbCBrZXlzIGJlZm9yZSBjb21wYXJpbmcgYW5kIHN0b3JpbmcKKyAgICAvLyB0
aGVtIGluIHRoZSBtYXAuIFRoZSBub3JtYWxpemF0aW9uIHdpbGwgY29udmVydCAtMC4wIGFuZCAw
LjAgdG8gdGhlIGludGVnZXIKKyAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgMC4KKyAgICByZXR1
cm4gc2FtZVZhbHVlKGV4ZWMsIGEsIGIpOworfQorCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbm9y
bWFsaXplTWFwS2V5KEpTVmFsdWUga2V5KQoreworICAgIGlmICgha2V5LmlzTnVtYmVyKCkpCisg
ICAgICAgIHJldHVybiBrZXk7CisKKyAgICBpZiAoa2V5LmlzSW50MzIoKSkKKyAgICAgICAgcmV0
dXJuIGtleTsKKworICAgIGRvdWJsZSBkID0ga2V5LmFzRG91YmxlKCk7CisgICAgaWYgKHN0ZDo6
aXNuYW4oZCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBpbnQgaSA9IHN0YXRpY19jYXN0
PGludD4oZCk7CisgICAgaWYgKGkgPT0gZCkgeworICAgICAgICAvLyBXaGVuIGEga2V5IGlzIC0w
LCB3ZSBjb252ZXJ0IGl0IHRvIHBvc2l0aXZlIHplcm8uCisgICAgICAgIC8vIFdoZW4gYSBrZXkg
aXMgdGhlIGRvdWJsZSByZXByZXNlbnRhdGlvbiBmb3IgYW4gaW50ZWdlciwgd2UgY29udmVydCBp
dCB0byBhbiBpbnRlZ2VyLgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaSk7CisgICAgfQorICAg
IC8vIFRoaXMgbWVhbnMga2V5IGlzIGRlZmluaXRlbHkgbm90IG5lZ2F0aXZlIHplcm8sIGFuZCBp
dCdzIGRlZmluaXRlbHkgbm90IGEgZG91YmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIu
IAorICAgIHJldHVybiBrZXk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNo
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNT
QUdFKG5vcm1hbGl6ZU1hcEtleSh2YWx1ZSkgPT0gdmFsdWUsICJXZSBleHBlY3Qgbm9ybWFsaXpl
ZCB2YWx1ZXMgZmxvd2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uIik7CisKKyAgICBpZiAodmFsdWUu
aXNEb3VibGUoKSkgeworICAgICAgICBkb3VibGUgZCA9IHZhbHVlLmFzRG91YmxlKCk7CisgICAg
ICAgIGlmICghc3RkOjppc25hbihkKSkgeworICAgICAgICAgICAgaW50IGkgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGQpOworICAgICAgICAgICAgaWYgKGkgPT0gZCkKKyAgICAgICAgICAgICAgICB2YWx1
ZSA9IGpzTnVtYmVyKGkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICh2YWx1ZS5pc1N0cmlu
ZygpKSB7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSk7CisgICAg
ICAgIGNvbnN0IFN0cmluZyYgd3RmU3RyaW5nID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKKyAgICAgICAgcmV0dXJuIHd0ZlN0cmluZy5pbXBsKCktPmhhc2goKTsKKyAg
ICB9CisgICAgdWludDY0X3QgcmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAg
IHJldHVybiBXVEY6OmludEhhc2gocmF3VmFsdWUpOworfQorCisvLyBXZSBoYXZlIGEgZGVmYXVs
dCB0ZW1wbGF0ZSBoZXJlIGp1c3QgdG8gYWxsb3cgdXNlcnMgb2YgdGhpcyBBUEkgdG8gZG8gSGFz
aE1hcEltcGw6OmRlbGV0ZWRWYWx1ZSgpLCBldGMuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1h
cEJ1Y2tldFR5cGU+CitjbGFzcyBIYXNoTWFwSW1wbCA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVmZmVyPEhhc2hNYXBCdWNr
ZXRUeXBlPiBIYXNoTWFwQnVmZmVyVHlwZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0g
SGFzaE1hcEJ1Y2tldFR5cGU+CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0
ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OnZhbHVl
LCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZtLmhhc2hNYXBJbXBsU2V0U3RydWN0dXJlLmdldCgpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gSGFzaE1hcEJ1Y2tldFR5cGU+CisgICAgc3RhdGljIHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0
cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEltcGxNYXBT
dHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCitwdWJsaWM6CisgICAgREVDTEFSRV9FWFBPUlRfSU5G
TzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgSGFzaE1hcEltcGwqIGNyZWF0ZShWTSYgdm0pCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCgKKyAgICAgICAgICAgIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXk+OjpvZmZzZXRPZktleSgpID09IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT46Om9mZnNldE9mS2V5KCkpOworCisgICAgICAgIEhhc2hNYXBJbXBsKiBpbXBsID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXApKSBIYXNoTWFwSW1w
bCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGltcGwtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgSGFz
aE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZt
LCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9kZWxldGVDb3Vu
dCgwKQorICAgICAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICB7CisgICAgfQorCisgICAgSGFzaE1h
cEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVm
ZmVyLmdldCgpLT5idWZmZXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgICAg
ICBtX2J1ZmZlci5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWZmZXJUeXBlOjpjcmVhdGUodm0sIHRo
aXMsIG1fY2FwYWNpdHkpKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyBpKyspCisgICAgICAg
ICAgICAgICAgQVNTRVJUKGlzRW1wdHkoYnVmZmVyKClbaV0pKTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIEZJWE1FOiBzb21lIGtpbmQgb2Ygd3JpdGUgYmFycmllciBvbiBvdXIgb3duZXI/Cisg
ICAgICAgIG1faGVhZC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0p
KTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwgdGhpcywgSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0
ZSh2bSkpOworCisgICAgICAgIG1faGVhZC0+c2V0TmV4dCh2bSwgbV90YWlsLmdldCgpKTsKKyAg
ICAgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgICAgICBtX2hlYWQt
PnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAgIG1fdGFpbC0+c2V0RGVsZXRlZCh0cnVlKTsKKwor
ICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0VHlwZSogZW1wdHlWYWx1ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBCdWNrZXRUeXBlKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigtMSkpOworICAgIH0KKworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNFbXB0eShIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJ1Y2tldCA9PSBlbXB0eVZhbHVlKCk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hN
YXBCdWNrZXRUeXBlKiBkZWxldGVkVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxIYXNoTWFwQnVja2V0VHlwZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTMpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRGVsZXRlZChIYXNoTWFw
QnVja2V0VHlwZSogYnVja2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBkZWxl
dGVkVmFsdWUoKTsKKyAgICB9CisKKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5
cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAg
ICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5KTsKKworICAgICAgICBjb25zdCB1aW50MzJf
dCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0ganNNYXBI
YXNoKGV4ZWMsIGtleSkgJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZl
ciA9IHRoaXMtPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0g
YnVmZmVyW2luZGV4XTsKKworICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAg
ICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVLZXlzRXF1YWwoZXhlYywga2V5
LCBidWNrZXQtPmtleSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7
CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1
Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgaWYgKEhhc2hNYXBCdWNrZXRUeXBlKiogYnVj
a2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuICgqYnVja2V0
KS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuICEhZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBhZGQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICB7CisgICAgICAgIGtleSA9IG5vcm1hbGl6ZU1h
cEtleShrZXkpOworCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGNvbnN0
IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMyX3QgaW5kZXgg
PSBqc01hcEhhc2goZXhlYywga2V5KSAmIG1hc2s7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBl
KiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBi
dWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkg
eworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVLZXlzRXF1YWwoZXhl
Yywga2V5LCBidWNrZXQtPmtleSgpKSkgeworICAgICAgICAgICAgICAgIGJ1Y2tldC0+c2V0VmFs
dWUodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tl
dCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKworICAgICAgICBIYXNoTWFwQnVja2V0VHlw
ZSogbmV3RW50cnkgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBuZXdF
bnRyeTsKKyAgICAgICAgbmV3RW50cnktPnNldEtleSh2bSwga2V5KTsKKyAgICAgICAgbmV3RW50
cnktPnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXREZWxldGVkKGZh
bHNlKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5ld1RhaWwgPSBIYXNoTWFwQnVja2V0
VHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwgdGhpcywgbmV3VGFpbCk7
CisgICAgICAgIG5ld1RhaWwtPnNldFByZXYodm0sIG5ld0VudHJ5KTsKKyAgICAgICAgbmV3VGFp
bC0+c2V0RGVsZXRlZCh0cnVlKTsKKyAgICAgICAgbmV3RW50cnktPnNldE5leHQodm0sIG5ld1Rh
aWwpOworICAgICAgICB1aW50MzJfdCBuZXdTaXplID0gKyttX3NpemU7CisgICAgICAgIGlmICgy
Km5ld1NpemUgPiBtX2NhcGFjaXR5KQorICAgICAgICAgICAgcmVoYXNoKGV4ZWMpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVja2V0ID0gZmluZEJ1
Y2tldChleGVjLCBrZXkpOworICAgICAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICAvLyBGSVhN
RTogc3RvcCBsZWFraW5nIG1lbW9yeSBoZXJlLCBhbmQgZmlndXJlIG91dCBpdGVyYXRvcnMuCisg
ICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBpbXBsID0gKmJ1Y2tldDsKKyAgICAgICAgaW1wbC0+
bmV4dCgpLT5zZXRQcmV2KHZtLCBpbXBsLT5wcmV2KCkpOworICAgICAgICBpbXBsLT5wcmV2KCkt
PnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7CisgICAgICAgIGltcGwtPnNldERlbGV0ZWQodHJ1
ZSk7CisKKyAgICAgICAgKmJ1Y2tldCA9IGRlbGV0ZWRWYWx1ZSgpOworCisgICAgICAgIG1fZGVs
ZXRlQ291bnQrKzsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJl
aGFzaChFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworCisgICAgICAgIG1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5ICogMjsKKyAgICAgICAgbV9idWZm
ZXIuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBtX2Nh
cGFjaXR5KSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAgICAgICAgICAg
IEFTU0VSVChpc0VtcHR5KHRoaXMtPmJ1ZmZlcigpW2ldKSk7CisgICAgICAgIH0KKworICAgICAg
ICBIYXNoTWFwQnVja2V0VHlwZSogaXRlciA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNo
TWFwQnVja2V0VHlwZSogZW5kID0gbV90YWlsLmdldCgpOworICAgICAgICBjb25zdCB1aW50MzJf
dCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9jYXBh
Y2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBi
dWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7Cisg
ICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBpdGVyLT5rZXkoKSkg
JiBtYXNrOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBl
KiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIHdoaWxlICghaXNFbXB0
eShidWNrZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBt
YXNrOworICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBp
dGVyOworICAgICAgICAgICAgaXRlciA9IGl0ZXItPm5leHQoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3NpemUgPj0gbV9kZWxldGVDb3VudCk7CisgICAgICAgIHJldHVy
biBtX3NpemUgLSBtX2RlbGV0ZUNvdW50OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBtX3NpemUgPSAwOworICAgICAgICBtX2RlbGV0ZUNvdW50ID0gMDsKKyAg
ICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQgPSBtX2hlYWQuZ2V0KCk7CisgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1h
cEJ1Y2tldFR5cGUqIHRhaWwgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQg
IT0gdGFpbCkgeworICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5leHQgPSBidWNrZXQt
Pm5leHQoKTsKKyAgICAgICAgICAgIC8vIFdlIHJlc3RhcnQgZWFjaCBpdGVyYXRvciBieSBwb2lu
dGluZyBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgICAgIGJ1Y2tldC0+c2V0
TmV4dCh2bSwgaGVhZCk7CisgICAgICAgICAgICBidWNrZXQgPSBuZXh0OworICAgICAgICB9Cisg
ICAgICAgIG1faGVhZC0+c2V0TmV4dCh2bSwgbV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90YWls
LT5zZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgICAgICBtX2NhcGFjaXR5ID0gNDsKKyAg
ICAgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRlKHZt
LCB0aGlzLCBtX2NhcGFjaXR5KSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzaXplX3Qg
YnVmZmVyU2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FwYWNp
dHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldFR5cGUqKTsKKyAgICB9CisKKy8vIEZJWE1FOiBtYWtl
IHByaXZhdGUuCitwdWJsaWM6CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBt
X2hlYWQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBtX3RhaWw7CisgICAg
Q29weUJhcnJpZXI8SGFzaE1hcEJ1ZmZlclR5cGU+IG1fYnVmZmVyOworICAgIHVpbnQzMl90IG1f
c2l6ZTsKKyAgICB1aW50MzJfdCBtX2RlbGV0ZUNvdW50OworICAgIHVpbnQzMl90IG1fY2FwYWNp
dHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludHJpbnNpYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0ludHJpbnNpYy5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIs
OSBAQCBlbnVtIEpTX0VYUE9SVF9QUklWQVRFIEludHJpbnNpYyB7CiAgICAgSXNSZWdFeHBPYmpl
Y3RJbnRyaW5zaWMsCiAgICAgSXNUeXBlZEFycmF5Vmlld0ludHJpbnNpYywKICAgICBCb3VuZFRo
aXNOb0FyZ3NGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgSlNNYXBHZXRJbnRyaW5zaWMsCisg
ICAgSlNNYXBIYXNJbnRyaW5zaWMsCisgICAgSlNTZXRIYXNJbnRyaW5zaWMsCiAKICAgICAvLyBH
ZXR0ZXIgaW50cmluc2ljcy4KICAgICBUeXBlZEFycmF5TGVuZ3RoSW50cmluc2ljLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMjA1
MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MDYsNiArNjA2LDkgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBKU0NlbGwqIGEsIAogCiBib29sIGlzVGhpc1ZhbHVlQWx0ZXJlZChjb25zdCBQdXRQcm9wZXJ0
eVNsb3QmLCBKU09iamVjdCogYmFzZU9iamVjdCk7CiAKKy8vIFNlZSBzZWN0aW9uIDcuMi45OiBo
dHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWUKK2Jvb2wgc2FtZVZh
bHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKTsKKwogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKICNlbmRpZiAvLyBKU0NKU1ZhbHVlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMjA1MTM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTA1Miw2ICsxMDUyLDIyIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc1Ro
aXNWYWx1ZUFsdGVyZWQoY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gU2VlIHNlY3Rpb24g
Ny4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZQorQUxX
QVlTX0lOTElORSBib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNW
YWx1ZSBiKQoreworICAgIGlmICghYS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7CisgICAgaWYgKCFiLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUgeCA9IGEuYXNOdW1iZXIoKTsKKyAgICBkb3Vi
bGUgeSA9IGIuYXNOdW1iZXIoKTsKKyAgICBib29sIHhJc05hTiA9IHN0ZDo6aXNuYW4oeCk7Cisg
ICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkpOworICAgIGlmICh4SXNOYU4gfHwgeUlzTmFO
KQorICAgICAgICByZXR1cm4geElzTmFOICYmIHlJc05hTjsKKyAgICByZXR1cm4gYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTVmFsdWVJbmxpbmVzX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlz
aW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI1LDcgKzcyNSw2IEBAIHB1dERpcmVjdFdpdGhv
dXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZt
LnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzU2V0UHJpdmF0ZU5hbWUoKSwgSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc1NldCksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLlNldEl0ZXJhdG9yUHJpdmF0ZU5h
bWUoKSwgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1
bmNTZXRJdGVyYXRvciksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAg
ICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnNl
dEl0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywg
MCwgU3RyaW5nKCksIHByaXZhdGVGdW5jU2V0SXRlcmF0b3JOZXh0KSwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAotICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXNNYXBQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpj
cmVhdGUodm0sIHRoaXMsIDEsIFN0cmluZygpLCBwcml2YXRlRnVuY0lzTWFwKSwgRG9udEVudW0g
fCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0u
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuaXNBcnJheVByaXZhdGVOYW1lKCksIGFycmF5
Q29uc3RydWN0b3ItPmdldERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+aXNBcnJheSksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzQXJyYXlDb25zdHJ1Y3RvclBy
aXZhdGVOYW1lKCksIHByaXZhdGVGdW5jSXNBcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSB8IERv
bnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5jb25jYXRNZW1jcHlQcml2YXRlTmFtZSgpLCBwcml2
YXRlRnVuY0NvbmNhdE1lbWNweSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNpb24gMjA1
MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxMCArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU01hcC5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAiQ29tbW9u
SWRlbnRpZmllcnMuaCIKICNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRl
ICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisj
aW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJNYXBEYXRhSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5j
bHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5o
IgogCkBAIC0zNywxNiArNDIsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5m
byBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhP
RF9UQUJMRShKU01hcCkgfTsKIAotdm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit2
b2lkIEpTTWFwOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KikKIHsKLSAg
ICBKU01hcCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOwotICAgIHRoaXNPYmpl
Y3QtPkpTTWFwOjp+SlNNYXAoKTsKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAg
bV9tYXAuc2V0KHZtLCB0aGlzLCBIYXNoTWFwSW1wbDo6Y3JlYXRlKHZtKSk7CiB9CiAKIHNpemVf
dCBKU01hcDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgSlNNYXAqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAgICBzaXplX3QgbWFwRGF0YVNpemUgPSB0
aGlzT2JqZWN0LT5tX21hcERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7CisgICAgLy9KU01hcCogdGhp
c09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOworICAgIC8vc2l6ZV90IG1hcERhdGFTaXpl
ID0gdGhpc09iamVjdC0+bV9tYXBEYXRhLmNhcGFjaXR5SW5CeXRlcygpOworICAgIHNpemVfdCBt
YXBEYXRhU2l6ZSA9IDA7IC8vIEZJWE1FOgogICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwpICsgbWFwRGF0YVNpemU7CiB9CiAKQEAgLTU4LDEzICs2NCwxNiBAQCBTdHJpbmcgSlNN
YXA6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjCiB2b2lkIEpTTWFwOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBE
YXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisgICAgLy9qc0Nhc3Q8SlNNYXAqPihj
ZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7CisKKyAgICBKU01h
cCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU01hcCo+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX21hcCk7CiB9CiAKLXZvaWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQorLyoK
K3NpemVfdCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgQmFzZTo6Y29weUJh
Y2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2Vs
bCktPm1fbWFwRGF0YS5jb3B5QmFja2luZ1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKKyAgICByZXR1
cm4gbV9tYXBEYXRhLnNpemUoZXhlYyk7CiB9CiAKIGJvb2wgSlNNYXA6OmhhcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUga2V5KQpAQCAtNzIsMjIgKzgxLDE0IEBAIGJvb2wgSlNNYXA6OmhhcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUKICAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4
ZWMsIGtleSk7CiB9CiAKLXNpemVfdCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4ZWMpOwotfQotCiBKU1ZhbHVlIEpTTWFwOjpnZXQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKIHsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1f
bWFwRGF0YS5nZXQoZXhlYywga2V5KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9tYXAuZ2V0
KGV4ZWMsIGtleSk7CiB9CiAKIHZvaWQgSlNNYXA6OnNldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5LCBKU1ZhbHVlIHZhbHVlKQogewotICAgIG1fbWFwRGF0YS5zZXQoZXhlYywgdGhpcywg
a2V5LCB2YWx1ZSk7CisgICAgbV9tYXAuc2V0KGV4ZWMsIHRoaXMsIGtleSwgdmFsdWUpOwogfQog
CiB2b2lkIEpTTWFwOjpjbGVhcihFeGVjU3RhdGUqKQpAQCAtOTksNSArMTAwLDYgQEAgYm9vbCBK
U01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYQogewogICAgIHJldHVybiBtX21hcERh
dGEucmVtb3ZlKGV4ZWMsIGtleSk7CiB9CisqLwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwOCArMjYsODkgQEAK
ICNpZm5kZWYgSlNNYXBfaAogI2RlZmluZSBKU01hcF9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0
aWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBK
U01hcEl0ZXJhdG9yOwogCi1jbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVj
dCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKLSAg
ICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU05vbkZp
bmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+IEJ1Y2tldFR5cGU7CiAKICAgICBmcmllbmQgY2xhc3MgSlNNYXBJdGVyYXRv
cjsKIAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRh
aW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4KLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3Jp
dGVCYXJyaWVyPFVua25vd24+IG1fa2V5OwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
bV92YWx1ZTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25v
d24+JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtl
eShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUga2V5KQotICAgICAgICB7
Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGtleSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwg
SlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93
bmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIo
KTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBK
U01hcEl0ZXJhdG9yPiBNYXBEYXRhOwogCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8o
T2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU01h
cFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKICAgICBzdGF0aWMgSlNN
YXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAg
SlNNYXAqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNYXA+KHZtLmhl
YXApKSBKU01hcCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtLCBzdHJ1Y3R1cmUt
Pmdsb2JhbE9iamVjdCgpKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVj
dCopOworCiAgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwg
c3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsK
LSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUq
LCBKU1ZhbHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVjU3RhdGUqLCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsK
LSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5F
IHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnNp
emUoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmdldChleGVj
LCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+aGFzKGV4ZWMs
IGtleSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9tYXAtPmFk
ZChleGVjLCBrZXksIHZhbHVlKTsKKyAgICB9CisgICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4
ZWMpCisgICAgeworICAgICAgICBtX21hcC0+Y2xlYXIoZXhlYyk7CisgICAgfQorICAgIGJvb2wg
cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gbV9tYXAtPnJlbW92ZShleGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
QnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX21hcC0+ZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAgIH0K
IAogcHJpdmF0ZToKICAgICBKU01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMp
CiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAg
c3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5
QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0
aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwogCi0g
ICAgTWFwRGF0YSBtX21hcERhdGE7CisgICAgLy8gRklYTUU6IGRvbid0IG1ha2UgdGhpcyBwdWJs
aWMuCitwdWJsaWM6CisgICAgdHlwZWRlZiBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+PiBIYXNoTWFwSW1wbDsKKyAgICBXcml0ZUJhcnJpZXI8SGFz
aE1hcEltcGw+IG1fbWFwOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNYXBJ
dGVyYXRvci5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5jbHVkZSAiQ29tbW9u
SWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTTWFwLmgiCkBAIC00MSw2ICs0NCw3IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9t
YXAuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7CisgICAgc2V0SXRlcmF0b3Iodm0sIG1f
bWFwLT5tX21hcC0+bV9oZWFkLmdldCgpKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00OSw2ICs1
Myw3IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9tYXApOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIp
OwogfQogCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjcsOSBAQCBKU1Zh
bHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTTWFwSXRlcmF0b3IqIEpT
TWFwSXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNsb25lID0g
SlNNYXBJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxP
YmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9tYXAuZ2V0KCksIG1fa2luZCk7Ci0g
ICAgY2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBjbG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQo
KSwgbV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQoKSk7CiAg
ICAgcmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYg
KzM0LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yIDogcHVibGlj
IEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVj
a2V0RGF0YUtleVZhbHVlPiBIYXNoTWFwQnVja2V0OwogcHVibGljOgogICAgIHR5cGVkZWYgSlNO
b25GaW5hbE9iamVjdCBCYXNlOwogCkBAIC01MSw1MiArNTIsNjIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQq
IGFkdmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFs
dWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5u
ZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgpOwor
ICAgICAgICBpZiAoIXByZXYpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
SGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChi
dWNrZXQgJiYgYnVja2V0LT5kZWxldGVkKCkpIHsKKyAgICAgICAgICAgIHByZXYgPSBidWNrZXQ7
CisgICAgICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgbnVs
bHB0cik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBz
ZXRJdGVyYXRvcihleGVjLT52bSgpLCBidWNrZXQpOyAvLyBXZSBrZWVwIG1faXRlciBvbiB0aGUg
bGFzdCB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisgICAgYm9vbCBuZXh0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBIYXNoTWFw
QnVja2V0KiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVy
YXRlVmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2
YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJh
dGVLZXkpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUg
PSBidWNrZXQtPmtleSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0
ZVBhaXIoY2FsbEZyYW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAgICAgICB2YWx1
ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT52YWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFsdWUoSlNWYWx1
ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6
OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRl
cmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5j
ZUl0ZXIoZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIGtleSA9IHBhaXIua2V5OwotICAgICAgICB2YWx1ZSA9IHBhaXIudmFs
dWU7CisgICAgICAgIGtleSA9IGJ1Y2tldC0+a2V5KCk7CisgICAgICAgIHZhbHVlID0gYnVja2V0
LT52YWx1ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlz
aCgpCi0gICAgewotICAgICAgICBtX2l0ZXJhdG9yLmZpbmlzaCgpOwotICAgIH0KLQogICAgIEl0
ZXJhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEpTVmFsdWUg
aXRlcmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmdldCgpOyB9CiAgICAgSlNNYXBJ
dGVyYXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0
b3JEYXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2l0ZXJhdG9y
OwotICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQor
ICAgIEpTTWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNNYXAqLCBJ
dGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAg
ICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fbWFwRGF0YS5jcmVhdGVJdGVyYXRvckRh
dGEodGhpcykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeyB9CisKKyAgICB2b2lkIHNl
dEl0ZXJhdG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQogICAgIHsKKyAgICAgICAg
bV9pdGVyLnNldCh2bSwgdGhpcywgYnVja2V0KTsKICAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKQEAgLTEwNCw3ICsxMTUsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAgSlNNYXA6Ok1h
cERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFw
QnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNywxMCArMzcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1Nl
dDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShKU1NldCkgfTsKIAotdm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit2b2lkIEpT
U2V0OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBq
c0Nhc3Q8SlNTZXQqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU1NldDo6fkpTU2V0KCk7Cisg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fbWFwLnNldCh2bSwgdGhpcywgSGFz
aE1hcEltcGw6OmNyZWF0ZSh2bSkpOwogfQogCiBTdHJpbmcgSlNTZXQ6OnRvU3RyaW5nTmFtZShj
b25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopCkBAIC01MCwyMyArNTAsMjAgQEAgU3RyaW5nIEpT
U2V0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplYwogCiBzaXplX3QgSlNTZXQ6OmVzdGltYXRl
ZFNpemUoSlNDZWxsKiBjZWxsKQogewotICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
U2V0Kj4oY2VsbCk7Ci0gICAgc2l6ZV90IHNldERhdGFTaXplID0gdGhpc09iamVjdC0+bV9zZXRE
YXRhLmNhcGFjaXR5SW5CeXRlcygpOworICAgIC8vSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNTZXQqPihjZWxsKTsKKyAgICAvL3NpemVfdCBzZXREYXRhU2l6ZSA9IHRoaXNPYmplY3QtPm1f
c2V0RGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKKyAgICBzaXplX3Qgc2V0RGF0YVNpemUgPSAwOwog
ICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgc2V0RGF0YVNpemU7CiB9CiAK
IHZvaWQgSlNTZXQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKIHsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIGpz
Q2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9y
KTsKLX0KLQotdm9pZCBKU1NldDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlW
aXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9rZW4pCi17Ci0gICAgQmFzZTo6Y29weUJhY2tp
bmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7Ci0gICAganNDYXN0PEpTU2V0Kj4oY2VsbCkt
Pm1fc2V0RGF0YS5jb3B5QmFja2luZ1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKKyAgICBKU1NldCog
dGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX21hcCk7CiB9CiAKKy8qCiBib29sIEpTU2V0OjpoYXMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIHJldHVybiBtX3NldERhdGEuY29udGFpbnMoZXhl
YywgdmFsdWUpOwpAQCAtOTEsNSArODgsNiBAQCBib29sIEpTU2V0OjpyZW1vdmUoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhCiB7CiAgICAgcmV0dXJuIG1fc2V0RGF0YS5yZW1vdmUoZXhlYywgdmFsdWUp
OwogfQorKi8KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCShy
ZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2OSArMjYsMjYgQEAKICNpZm5kZWYgSlNTZXRfaAogI2Rl
ZmluZSBKU1NldF9oCiAKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgogI2luY2x1ZGUgIkpTRGVz
dHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJNYXBE
YXRhLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1NldEl0ZXJhdG9yOwogCi1jbGFz
cyBKU1NldCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU1NldCA6IHB1
YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3Rp
YmxlT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAg
dHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PiBCdWNrZXRUeXBlOwog
CiAgICAgZnJpZW5kIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLSAgICAvLyBPdXIgbWFya2luZyBm
dW5jdGlvbnMgZXhwZWN0IEVudHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBh
bGwKLSAgICAvLyBmaWVsZHMgYmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgY2xhc3MgRW50
cnkgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2tleTsK
LQotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXko
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0K
LQotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICB7Ci0gICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9rZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBzZXRLZXkoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIGtleSkKLSAgICAg
ICAgewotICAgICAgICAgICAgbV9rZXkuc2V0KHZtLCBvd25lciwga2V5KTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgc2V0S2V5V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlIGtleSkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9rZXkuc2V0V2l0aG91dFdyaXRlQmFycmllcihrZXkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCosIEpT
VmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBtX2tleS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfTsKLQot
ICAgIHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnksIEpTU2V0SXRlcmF0b3I+IFNldERhdGE7Ci0K
ICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTU2V0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOwogICAgIH0KIAogICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC05NywzMiArNTQsNTUgQEAgcHVibGljOgogICAgICAgICBpbnN0
YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAg
fQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAg
IHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgewogICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7
CiAgICAgfQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6ZV90
IHNpemUoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoRXhlY1N0
YXRlKiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJl
bW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5zaXplKCk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fbWFwLT5oYXMoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAg
ICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcihFeGVj
U3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBtX21hcC0+Y2xlYXIoZXhlYyk7CisgICAgfQor
CisgICAgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX21hcC0+cmVtb3ZlKGV4ZWMsIGtleSk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5maW5kQnVja2V0KGV4ZWMsIGtl
eSk7CisgICAgfQogCi1wcml2YXRlOgorcHVibGljOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAs
IG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7
CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwot
ICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBD
b3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKik7CiAKLSAgICBTZXREYXRhIG1fc2V0RGF0YTsKKyAgICB0eXBlZGVmIEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiBIYXNoTWFwSW1w
bDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEltcGw+IG1fbWFwOwogfTsKIAogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHJl
dmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRl
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHZvaWQgSlNTZXRJdGVy
YXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7CisgICAgc2V0SXRl
cmF0b3Iodm0sIG1fc2V0LT5tX21hcC0+bV9oZWFkLmdldCgpKTsKIH0KIAogdm9pZCBKU1NldEl0
ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CkBAIC00OSw2ICs1MCw3IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9zZXQpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX2l0ZXIpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCAr
NjQsOSBAQCBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTU2V0
SXRlcmF0b3IqIEpTU2V0SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBh
dXRvIGNsb25lID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxl
ZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCks
IG1fa2luZCk7Ci0gICAgY2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2
bSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgp
LCBtX3NldC5nZXQoKSwgbV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRl
ci5nZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1NldEl0ZXJh
dG9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleT4gSGFzaE1hcEJ1Y2tldDsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIApAQCAtNTIsNDYgKzUzLDU5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0KiBhZHZhbmNlSXRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBXVEY6
OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRl
cmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogcHJldiA9IG1faXRlci5n
ZXQoKTsKKyAgICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOworICAgICAgICB3
aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKSB7CisgICAgICAgICAgICBwcmV2ID0g
YnVja2V0OworICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZt
KCksIG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgYnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0ZXIg
b24gdGhlIGxhc3QgdmFsdWUuCisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorCisgICAg
Ym9vbCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAg
ICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYg
KCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgaWYgKG1fa2lu
ZCA9PSBJdGVyYXRlVmFsdWUgfHwgbV9raW5kID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2
YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPmtleSgpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoY2FsbEZyYW1lLCBwYWly
LmtleSwgcGFpci5rZXkpOworICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGV4ZWMsIGJ1
Y2tldC0+a2V5KCksIGJ1Y2tldC0+a2V5KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKLSAgICB2b2lkIGZpbmlzaCgpCi0gICAgewotICAgICAgICBtX2l0ZXJhdG9yLmZpbmlzaCgp
OwotICAgIH0KLQogICAgIEl0ZXJhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQogICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0Lmdl
dCgpOyB9CiAgICAgSlNTZXRJdGVyYXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU1Nl
dDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICZtX2l0ZXJhdG9yOwotICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU1NldEl0ZXJhdG9y
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiBpdGVyYXRlZE9iamVjdCwgSXRl
cmF0aW9uS2luZCBraW5kKQorICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNTZXQqLCBJdGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwg
c3RydWN0dXJlKQotICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fc2V0RGF0
YS5jcmVhdGVJdGVyYXRvckRhdGEodGhpcykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAg
ewogICAgIH0KIAorICAgIHZvaWQgc2V0SXRlcmF0b3IoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBi
dWNrZXQpCisgICAgeworICAgICAgICBtX2l0ZXIuc2V0KHZtLCB0aGlzLCBidWNrZXQpOyAKKyAg
ICB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNT
ZXQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1l
KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAg
ICBKU1NldDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJy
aWVyPEhhc2hNYXBCdWNrZXQ+IG1faXRlcjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07
CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMjA1
MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDggKzgyLDEwIEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgTW9k
dWxlRW52aXJvbm1lbnRUeXBlLAogICAgIFJlZ0V4cE9iamVjdFR5cGUsCiAgICAgUHJveHlPYmpl
Y3RUeXBlLAorICAgIEpTTWFwVHlwZSwKKyAgICBKU1NldFR5cGUsCiAKLSAgICBMYXN0SlNDT2Jq
ZWN0VHlwZSA9IFByb3h5T2JqZWN0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IEpTTWFw
VHlwZSwKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU1R5cGUpID09IHNpemVvZih1aW50
OF90KSwgc2l6ZW9mX2pzdHlwZV9pc19vbmVfYnl0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRv
clByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJdGVyYXRvcgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAg
IGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1
bHQsIGZhbHNlKSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5l
ZCgpLCB0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01h
cFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTQg
KzcwLDEzIEBAIHZvaWQgTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMt
PmNsZWFyLCBtYXBQcm90b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdv
cmQsIG1hcFByb3RvRnVuY0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVO
Q1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9G
dW5jR2V0LCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVt
LCAxKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBK
U01hcEdldEludHJpbnNpYyk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBE
b250RW51bSwgMSwgSlNNYXBIYXNJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0
LCBEb250RW51bSwgMik7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSwgbWFw
UHJvdG9GdW5jS2V5cywgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1
YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jVmFsdWVzLCBEb250RW51bSwgMCk7CiAKLSAgICAvLyBQ
cml2YXRlIGdldCAvIHNldCBvcGVyYXRpb25zLgotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZh
dGVOYW1lKCksIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVf
SU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5nZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVt
LCAxLCBKU01hcEdldEludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5h
bWUoKSwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiAKICAgICBKU0Z1bmN0aW9uKiBl
bnRyaWVzID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1h
cFByb3RvRnVuY0VudHJpZXMpOwpAQCAtOTAsMTYgKzg5LDE0IEBAIHZvaWQgTWFwUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogQUxXQVlTX0lOTElORSBzdGF0aWMgSlNNYXAqIGdl
dE1hcChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB0aGlzVmFsdWUpCiB7Ci0gICAgaWYg
KCF0aGlzVmFsdWUuaXNPYmplY3QoKSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlz
Q2VsbCgpKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBjcmVhdGVOb3RBbk9i
amVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KLSAgICBKU01hcCogbWFwID0ganNEeW5hbWljQ2FzdDxKU01hcCo+KHRoaXNWYWx1
ZSk7Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBB
U0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0IikpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKKyAgICBpZiAo
TElLRUxZKHRoaXNWYWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpTTWFwVHlwZSkpCisgICAgICAg
IHJldHVybiBqc0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOworICAgIHRocm93VHlwZUVycm9yKGNh
bGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9i
amVjdCIpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTE3Nywx
MSArMTc0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bgogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKGNhbGxGcmFtZS0+
dm0oKSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3Ry
dWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJU
KGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwpAQCAt
MTk0LDEzICsxODYsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVu
YwogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlzVmFs
dWUoKSkpOwogICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganNDYXN0PEpTTWFwSXRlcmF0
b3IqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAgIGlm
IChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgaWYgKGl0ZXJhdG9y
LT5uZXh0S2V5VmFsdWUoZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgSlNBcnJheSogcmVz
dWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsK
ICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIGtleSk7CiAgICAg
ICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAxLCB2YWx1ZSk7CiAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgfQotICAgIGl0
ZXJhdG9yLT5maW5pc2goKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0
cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3Rv
dHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFBy
b3RvdHlwZS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBQcm90b3R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOwogfTsK
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0
ZSopOwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9y
KEV4ZWNTdGF0ZSopOwogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01h
cEl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMjIgKzE5MSw2IEBAIHZvaWQgUHJvcGVydHlEZXNj
cmlwdG9yOjpzZXRHZXR0ZXIoSlNWYWwKICAgICBtX2F0dHJpYnV0ZXMgJj0gflJlYWRPbmx5Owog
fQogCi0vLyBTZWUgRVM1LjEgOS4xMgotYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGEsIEpTVmFsdWUgYikKLXsKLSAgICBpZiAoIWEuaXNOdW1iZXIoKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGEsIGIpOwotICAgIGlmICghYi5pc051
bWJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZG91YmxlIHggPSBhLmFzTnVtYmVy
KCk7Ci0gICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7Ci0gICAgYm9vbCB4SXNOYU4gPSBzdGQ6
OmlzbmFuKHgpOwotICAgIGJvb2wgeUlzTmFOID0gc3RkOjppc25hbih5KTsKLSAgICBpZiAoeElz
TmFOIHx8IHlJc05hTikKLSAgICAgICAgcmV0dXJuIHhJc05hTiAmJiB5SXNOYU47Ci0gICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgPT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih5
KTsKLX0KLQogYm9vbCBQcm9wZXJ0eURlc2NyaXB0b3I6OmVxdWFsVG8oRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIG90aGVyKSBjb25zdAogewogICAgIGlmIChvdGhl
ci5tX3ZhbHVlLmlzRW1wdHkoKSAhPSBtX3ZhbHVlLmlzRW1wdHkoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmgJKHJldmlz
aW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVz
Y3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVW
YWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKLQogY2xhc3MgUHJvcGVydHlEZXNj
cmlwdG9yIHsKIHB1YmxpYzoKICAgICBQcm9wZXJ0eURlc2NyaXB0b3IoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw2IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3IKIAogICAgIGlmIChpdGVy
YXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNl
KSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVl
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2
b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgSlNDX05BVElWRV9G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YWRkLCBzZXRQcm90
b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgc2V0UHJvdG9GdW5jQ2xlYXIsIERv
bnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQcm90b0Z1bmNEZWxldGUsIERvbnRF
bnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOworICAgIEpT
Q19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEsIEpTU2V0SGFzSW50cmlu
c2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLCBzZXRQcm90b0Z1
bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1bmN0aW9uKiB2YWx1ZXMgPSBKU0Z1
bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmluZygpLCBzZXRQcm90b0Z1bmNWYWx1
ZXMpOwpAQCAtMTc3LDcgKzE3Nyw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJp
dmF0ZUZ1bmMKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIHJl
c3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7
CiAgICAgfQotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1ZGUgIkpT
SW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVu
dC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAi
SlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3Iu
aCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKQEAgLTI0OSw2ICsyNTAsMTAg
QEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIEVOQUJMRShX
RUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMs
IFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAjZW5kaWYKKyAgICBoYXNoTWFwQnVja2V0U2V0U3RydWN0dXJlLnNldCgqdGhpcywgSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLnNldCgqdGhpcywg
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGhhc2hNYXBJbXBsU2V0U3RydWN0dXJlLnNldCgq
dGhpcywgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpj
cmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEltcGxNYXBT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5VmFsdWU+Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
CiAgICAgaXRlcmF0aW9uVGVybWluYXRvci5zZXQoKnRoaXMsIEpTRmluYWxPYmplY3Q6OmNyZWF0
ZSgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSwgMSkpKTsKICAgICBuYXRpdmVTdGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBO
YXRpdmVTdGRGdW5jdGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA1MTM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAt
MzI5LDYgKzMyOSwxMCBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZhbENvZGVC
bG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkNvZGVCbG9ja1N0
cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVj
dHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFwQnVja2V0U2V0U3RydWN0dXJlOwor
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmU7CisgICAgU3Ry
b25nPFN0cnVjdHVyZT4gaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVj
dHVyZT4gaGFzaE1hcEltcGxNYXBTdHJ1Y3R1cmU7CiAKICAgICBTdHJvbmc8SlNDZWxsPiBpdGVy
YXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlOYW1lRW51
bWVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM2Niw3ICsxMzY2LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxp
emVyOgogICAgICAgICAgICAgY2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7CiAgICAgICAg
ICAgICAgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBtYXBJdGVyYXRvclN0YWNrLmxhc3Qo
KTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgICAgICAgICAgICAg
aWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKG1fZXhlYywga2V5LCB2YWx1ZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAg
ICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihvYmplY3Qp
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287592</attachid>
            <date>2016-08-31 20:52:54 -0700</date>
            <delta_ts>2016-09-01 15:00:12 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>125945</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRl
ci5jcHAKKyAgICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmll
ci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVk
VHlwZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDUx
MzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTMwNCw2ICsxMzA0LDggQEAKIAkJNzk3
RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJ
CTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09y
aWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTc5QTA5MDdGMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RDFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovOyB9OworCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTIyODM1MUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRo
UHJvZmlsZS5jcHAgKi87IH07CiAJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgfTsKIAkJNzlBRjBC
RTQxRDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1
RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTM0LDYgKzM1MzYsOCBAQAogCQk3OTdFMDdBNzFC
OEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsg
cGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRo
UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFBy
b2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFF
MDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFyaXRoUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlG
RTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTU3NjgsNiArNTc3Miw4IEBACiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1
OUVFIC8qIEdldFB1dEluZm8uaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyog
R2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0
dGVyU2V0dGVyLmggKi8sCisJCQkJNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJ
bXBsLmNwcCAqLywKKwkJCQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
aCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8s
CiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4
NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKQEAgLTc0
MjgsNiArNzQzNCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNo
ZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4
RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5QTA5MDgwMUQ3Njg0
NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkx
OTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRl
cnMgKi8sCkBAIC05MTQ2LDYgKzkxNTMsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5
QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0
ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMx
NzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZBQTAwQ0Y2NTY0IC8q
IEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3
IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZp
c2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRl
ZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiRGly
ZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rp
b24uaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAi
SlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0
cmluZ09iamVjdC5oIgpAQCAtMzQ2LDYgKzM0OCwxMiBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBpZiAoY2xhc3NJbmZvID09IFJlZ0V4cE9iamVjdDo6
aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1JlZ0V4cE9iamVjdDsKKworICAgIGlmIChjbGFz
c0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNNYXBPYmplY3Q7CisK
KyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVj
U2V0T2JqZWN0OwogICAgIAogICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0
aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9u
IDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MSArMzksNDMgQEAgY2xhc3MgU3RydWN0dXJlOwog
CiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0ZWRUeXBlOwogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAgICAgPSAwOyAvLyBXZSBkb24ndCBrbm93IGFueXRo
aW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAg
ICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQXJyYXkgICAgICAgICAgICAgID0gMXUgPDwgMTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0gMXUgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAg
ICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDhBcnJheSBvciBvbmUg
b2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDE2
QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5
IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjSW50MzJBcnJheSAgICAgICAgID0gMXUgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdSA8PCA2OyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gVWludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5ICA9IDF1IDw8IDc7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMu
Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1
IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1
YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAg
ICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MzJBcnJheSBvciBvbmUg
b2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Zsb2F0
MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJy
YXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdSA8PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXVsbCA8PCAwOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxsIDw8IDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpT
QXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bmN0aW9uICAgICAgICAg
ICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0gMXVsbCA8PCAzOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
K3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MTZBcnJheSAgICAgICAgID0gMXVs
bCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1
YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDMyQXJyYXkgICAg
ICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25l
IG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50
OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OEFy
cmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXVsbCA8PCA3OyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJheSAgICAgICAgPSAxdWxsIDw8IDg7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMu
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1
bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQzMkFycmF5
ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9y
IG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
RmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJheSB8IFNwZWNJbnQx
NkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNwZWNVaW50OENsYW1w
ZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8IFNwZWNGbG9hdDMy
QXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8PCAxMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgRGly
ZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU2Nv
cGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFy
Z3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09i
amVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3Qu
Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1
IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBSZWdFeHBPYmplY3QgKGFuZCBub3QgYW55IHN1
YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y09iamVjdE90aGVyICAgICAgICA9IDF1IDw8IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2Jq
ZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJheSwgb3IgSlNGdW5jdGlvbi4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0ICAgICAgICAgICAgID0gU3BlY0ZpbmFs
T2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwg
U3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1bWVudHMgfCBTcGVjU3RyaW5nT2Jq
ZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2Vk
IGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlvbi4KLXN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0gMXUgPDwgMTc7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAgICAgPSAxdSA8PCAx
ODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlm
aWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAg
PSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1bWVudHMgICAgPSAx
dWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0Lgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3QgICAgICAgPSAxdWxs
IDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCitzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1bGwgPDwgMTU7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5vdCBhbnkgc3ViY2xhc3Mgb2YgUmVn
RXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWFwT2JqZWN0ICAg
ICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQncyBkZWZpbml0ZWx5IE1hcCBvYmplY3QgKGNhbiBp
dCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y1NldE9iamVjdCAgICAgICAgICA9IDF1bGwgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBzIFNl
dCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1bGwgPDwgMTg7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBK
U0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAg
ICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVj
VHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50
cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3BlY01hcE9iamVjdCB8
IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVz
dGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDF1bGwgPDwgMTk7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAgICAgPSAxdWxsIDw8IDIwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFuIGlkZW50aWZpZXIu
CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZyAgICAgICAgICAgICA9IFNw
ZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdWYXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3Ry
aW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTeW1ib2wgICAgICAgICAgICAg
PSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3ltYm9sLgotc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAgICAgICAgPSAxdSA8PCAyMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVm
aW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0
IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1bGwgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVseSBh
IFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAg
ICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBz
dWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5
bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNv
ZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAgICAgICA9IFNwZWNP
YmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNDZWxsT3RoZXI7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9v
bEludDMyICAgICAgICAgID0gMXUgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3
aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTm9uQm9v
bEludDMyICAgICAgID0gMXUgPDwgMjI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRo
IHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxsIDw8IDIzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
SW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwgPDwgMjQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJ
bnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAgICAgPSBTcGVjQm9vbEludDMyIHwgU3BlY05vbkJv
b2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyLgotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdSA8PCAyMzsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBk
ZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
SW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5v
dCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQW55SW50ICAgICAg
ICAgICAgID0gU3BlY0ludDMyT25seSB8IFNwZWNJbnQ1Mk9ubHk7IC8vIEl0J3Mgc29tZXRoaW5n
IHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50IGFyaXRobWV0aWMgb24uCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFzRG91YmxlICAgICA9IDF1IDw8IDI0OyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdSA8PCAyNTsgLy8g
SXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1MiBidXQgaXQncyBhIHJlYWwgbnVtYmVyIGFuZCBp
dCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJbnRBc0Rv
dWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0
J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25J
bnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3OyAvLyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIElu
dDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5kIGl0J3MgYSBkb3VibGUuCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVJlYWwgICAgICAgICA9IFNwZWNOb25JbnRBc0Rv
dWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgbm9uLU5hTiBk
b3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAg
ICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFn
IChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1
cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgTmFOIHRoYXQgaXMgdW5z
YWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxsIDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBO
YU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdWxsIDw8IDI5OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUgdG8gdGFnIChpLmUuIGltcHVyZSkuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZU5hTiAgICAgICAgICA9IFNwZWNEb3VibGVQ
dXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5hTjsgLy8gSXQncyBkZWZpbml0ZWx5IHNvbWUga2lu
ZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlRG91Ymxl
ICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZVB1cmVOYU47IC8vIEl0J3MgZWl0aGVy
IGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUsIGJ1dCBpdCdzIGRlZmluaXRlbHkgbm90IGltcHVy
ZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxEb3VibGUgICAgICAg
ICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZU5hTjsgLy8gSXQncyBlaXRoZXIgYSBub24t
TmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgxLDEyICs4MywxMiBAQCBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRG91YmxlUmVhbDsgLy8gSXQn
cyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGVSZWFsLCBvciBhIEludDUyLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJlciAgICAgPSBTcGVjSW50MzJPbmx5
IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJs
ZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IFNwZWNBbnlJbnQgfCBTcGVj
RnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwg
YW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICA9IDF1IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAg
ICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVu
ZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAg
ICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0gMXVsbCA8PCAzMTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gU3BlY0Jvb2xlYW4gfCBT
cGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBV
bmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0hlYXBUb3AgICAgICAg
ICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0IGNh
biBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9ubHkgYW5kIFNwZWNE
b3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1ByaW1pdGl2
ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5vbi1PYmplY3QgSlNWYWx1ZS4KLXN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXUgPDwgMzA7IC8vIEl0
J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMzI7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IFNwZWNIZWFwVG9wIHwgU3BlY0VtcHR5OyAvLyBJ
dCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50NTJPbmx5IGFuZCBT
cGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNwb25kcyB0byB3aGF0IGNvdWxkIGJlIGZvdW5kIGlu
IGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxU
b3AgICAgICAgICAgICA9IFNwZWNCeXRlY29kZVRvcCB8IFNwZWNGdWxsTnVtYmVyOyAvLyBJdCBj
YW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29kZSBjb3VsZCBzZWUgcGx1cyBleG90aWMgZW5jb2Rp
bmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYgKzk3NywyMCBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9u
bHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShtX2dyYXBoLCBT
cGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVj
a2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAg
ICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNKU0FycmF5OgogICAg
IGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0yODgzLDcgKzI4OTcsNiBAQCB0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewogICAgIE5vZGUqIG5v
ZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgCiAgICAgc3RhcnRF
eGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVF
ZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI1MzgsNyArMjUzOCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWNDYWxsCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQp
LCBnZXQob3BlcmFuZCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAor
CisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdl
dCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAg
ICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNoLCBrZXkpOworICAgICAgICBOb2RlKiBi
dWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgRWRnZShtYXAsIE1hcE9iamVjdFVzZSks
IEVkZ2Uoa2V5KSwgRWRnZShoYXNoKSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3Jh
cGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVj
a2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBKU1NldEhhc0ludHJp
bnNpYzoKKyAgICBjYXNlIEpTTWFwSGFzSW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBpbnNlcnRDaGVja3MoKTsKKworICAgICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0
dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2Rl
KiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQp
KTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKKyAgICAg
ICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0
T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dy
YXBoKEdldE1hcEJ1Y2tldCwgT3BJbmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1c2VLaW5kKSwgRWRn
ZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChJ
c05vbkVtcHR5TWFwQnVja2V0LCBidWNrZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
ICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNTEzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjQzLDYgKzEyNDMsMjcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblRhaWw6CiAgICAgICAgIHdyaXRlKFNp
ZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAg
ZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldE1hcEJ1
Y2tldDogeworICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBFZGdlJiBtYXBFZGdl
ID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBub2RlLT5jaGlsZDIo
KTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEJ1Y2tldExvYywgTWlzY0ZpZWxkcywg
bWFwRWRnZSwga2V5RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgcmVhZChNaXNjRmll
bGRzKTsKKyAgICAgICAgRWRnZSYgYnVja2V0RWRnZSA9IG5vZGUtPmNoaWxkMSgpOworICAgICAg
ICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwR2V0TG9jLCBNaXNjRmllbGRzLCBidWNrZXRFZGdlKSwg
TGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSXNOb25F
bXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgZGVmKEhl
YXBMb2NhdGlvbihKU01hcFNldEhhc0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+Y2hpbGQxKCkpLCBM
YXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBMYXN0
Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4NSw2ICsxODUsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
KQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tXYXRjaGRvZ1RpbWVyOgog
ICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgIGNhc2UgTWFwSGFzaDoKKyAgICBjYXNl
IEdldE1hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJ
c05vbkVtcHR5TWFwQnVja2V0OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBFeHRy
YWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29wOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5
LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlzdDsKICAgICAKICNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJuIDc7
IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gODsgfQog
ICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9kZSwgVXNlS2luZCB1
c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cywgS2lsbFN0YXR1cyBraWxsU3RhdHVzKQog
ICAgIHsKQEAgLTE5Nyw4ICsxOTcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgdWludHB0cl90IHNo
aWZ0ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIDw8IHNoaWZ0KCk7CiAg
ICAgICAgIEFTU0VSVCgoc2hpZnRlZFZhbHVlID4+IHNoaWZ0KCkpID09IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0gMCAmJiB1c2VLaW5k
IDwgTGFzdFVzZUtpbmQpOwotICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4o
TGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDIpIDw8IHNoaWZ0
KCkpKTsKLSAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBz
dGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0dXMpKTsKKyAgICAg
ICAgc3RhdGljX2Fzc2VydCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwg
MikgPCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSwgIldlIHJlbHkgb24g
dGhpcyBiZWluZyB0cnVlIHRvIG5vdCBjbG9iYmVyIHRoZSBub2RlIHBvaW50ZXIuIik7CisgICAg
ICAgIHVpbnRwdHJfdCByZXN1bHQgPSBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8dWludHB0
cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8IDEpIHwg
c3RhdGljX2Nhc3Q8dWludHB0cl90PihERkc6OmlzUHJvdmVkKHByb29mU3RhdHVzKSk7CisgICAg
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICB1bmlvbiBVIHsKKyAgICAg
ICAgICAgICAgICBVKCkgeyB3b3JkID0gMDsgfQorICAgICAgICAgICAgICAgIHVpbnRwdHJfdCB3
b3JkOworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZTsKKyAgICAgICAgICAgIH0gdTsKKyAgICAg
ICAgICAgIEFTU0VSVCh1LmVkZ2UudXNlS2luZFVuY2hlY2tlZCgpID09IHVzZUtpbmQpOworICAg
ICAgICAgICAgQVNTRVJUKHUuZWRnZS5ub2RlKCkgPT0gbm9kZSk7CisgICAgICAgICAgICBBU1NF
UlQodS5lZGdlLnByb29mU3RhdHVzVW5jaGVja2VkKCkgPT0gcHJvb2ZTdGF0dXMpOworICAgICAg
ICAgICAgQVNTRVJUKHUuZWRnZS5raWxsU3RhdHVzVW5jaGVja2VkKCkgPT0ga2lsbFN0YXR1cyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAjZWxzZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZp
c2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ1LDYgKzE1NDUsMjUgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6Cisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkK
KyAgICAgICAgICAgICAgICBmaXhFZGdlPE1hcE9iamVjdFVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2Up
CisgICAgICAgICAgICAgICAgZml4RWRnZTxTZXRPYmplY3RVc2U+KG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgZml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgICAgICBmaXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAg
ICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICAgICAg
Zml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFr
OworCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNh
c2VzIGhlcmUgdG8gZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZv
ciBuZXcgb3Bjb2Rlcy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKQEAgLTE2MTYsNiArMTYz
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgUHV0QnlWYWxXaXRoVGhpczoKICAgICAgICAg
Y2FzZSBHZXRCeVZhbFdpdGhUaGlzOgogICAgICAgICBjYXNlIENvbXBhcmVFcVB0cjoKKyAgICAg
ICAgY2FzZSBNYXBIYXNoOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVh
cExvY2F0aW9uLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDE1
IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBjYXNlIFJl
Z0V4cE9iamVjdExhc3RJbmRleExvYzoKICAgICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3RM
YXN0SW5kZXhMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBCdWNrZXRMb2M6
CisgICAgICAgIG91dC5wcmludCgiSlNNYXBCdWNrZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNNYXBHZXRMb2MiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBTZXRIYXNMb2M6CisgICAgICAgIG91dC5w
cmludCgiSlNNYXBTZXRIYXNMb2MiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OCw3ICs1OCwxMCBAQCBlbnVtIExvY2F0aW9uS2luZCB7CiAgICAgU3RydWN0dXJlTG9jLAogICAg
IFR5cGVkQXJyYXlCeXRlT2Zmc2V0TG9jLAogICAgIFN0YWNrTG9jLAotICAgIFN0YWNrUGF5bG9h
ZExvYworICAgIFN0YWNrUGF5bG9hZExvYywKKyAgICBKU01hcEJ1Y2tldExvYywKKyAgICBKU01h
cEdldExvYywKKyAgICBKU01hcFNldEhhc0xvYwogfTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAyMDUxMzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxOSw2ICsxNDE5LDcgQEAgcHVibGljOgogICAgICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAg
ICAgICAgIGNhc2UgU3RyaW5nUmVwbGFjZVJlZ0V4cDoKICAgICAgICAgY2FzZSBUb051bWJlcjoK
KyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAyMDUxMzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM4OCw3ICszODgsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRvciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1
bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmlj
UG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhUb0lu
ZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpCisgICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJl
c3VsdEpTKSBcCisgICAgLyogSGFzaGluZyBub2RlcyBmb3IgSlNNYXAgYW5kIEpTU2V0ICovIFwK
KyAgICBtYWNybyhNYXBIYXNoLCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBtYWNybyhHZXRNYXBC
dWNrZXQsIE5vZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKExvYWRGcm9tSlNNYXBCdWNrZXQsIE5v
ZGVSZXN1bHRKUykgXAorICAgIG1hY3JvKElzTm9uRW1wdHlNYXBCdWNrZXQsIE5vZGVSZXN1bHRC
b29sZWFuKSBcCiAKIC8vIFRoaXMgZW51bSBnZW5lcmF0ZXMgYSBtb25vdG9uaWNhbGx5IGluY3Jl
YXNpbmcgaWQgZm9yIGFsbCBOb2RlIHR5cGVzLAogLy8gYW5kIGlzIHVzZWQgYnkgdGhlIHN1YnNl
cXVlbnQgZW51bSB0byBmaWxsIG91dCB0aGUgaWQgKGFzIGFjY2Vzc2VkIHZpYSB0aGUgTm9kZUlk
TWFzaykuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5j
cHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDggQEAKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
cklubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUg
IkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIK
QEAgLTE3OTEsNiArMTc5MywzNCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0RHlu
YW1pY1ZhCiAgICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywgaWRlbnQs
IEpTVmFsdWU6OmRlY29kZSh2YWx1ZSksIHNsb3QpOwogfQogCitpbnQzMl90IEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGlucHV0
KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgcmV0dXJuIGpzTWFwSGFzaChleGVjLCBub3JtYWxp
emVNYXBLZXkoSlNWYWx1ZTo6ZGVjb2RlKGlucHV0KSkpOworfQorCitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBt
YXAsIEVuY29kZWRKU1ZhbHVlIGtleSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICBKU01hcDo6QnVj
a2V0VHlwZSoqIGJ1Y2tldCA9IGpzQ2FzdDxKU01hcCo+KG1hcCktPmZpbmRCdWNrZXQoZXhlYywg
SlNWYWx1ZTo6ZGVjb2RlKGtleSkpOworICAgIGlmICghYnVja2V0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gKmJ1Y2tldDsKK30KKworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogbWFwLCBF
bmNvZGVkSlNWYWx1ZSBrZXkpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5
cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFs
dWU6OmRlY29kZShrZXkpKTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhp
dEJhc2UqIGV4aXQpCiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIsNiArMTQyLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQXJyYXkKIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJv
cGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAoraW50MzJf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgaW5wdXQpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tl
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7CitKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29k
ZWRKU1ZhbHVlKTsKKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09i
amVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzExLDYgKzcxMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBMb2FkRnJv
bUpTTWFwQnVja2V0OgogICAgICAgICBjYXNlIFRvTnVtYmVyOiB7CiAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC03NDEsNiArNzQyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJl
YWs7CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA1MTM0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEZ1bmN0aW9u
VXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFJlZ0V4cE9i
amVjdFVzZToKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU2V0T2Jq
ZWN0VXNlOgogICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgU3Ry
aW5nSWRlbnRVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMzU1LDYgKzM1NywxMCBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRE
eW5hbWljVmFyOgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAgICBjYXNlIFJlc29sdmVTY29w
ZToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBM
b2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw5IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTRW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJKU0xl
eGljYWxFbnZpcm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9w
ZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJPYmpl
Y3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUg
IlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgpAQCAtNDYxNSw2ICs0NjE3LDEzMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAor
ICAgIGNhc2UgTWFwSGFzaDogeworICAgICAgICBjb21waWxlTWFwSGFzaChub2RlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUlu
dDMyT3BlcmFuZCBoYXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IG1hc2sodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IGJ1ZmZlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1Y2tl
dCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBH
UFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXNrR1BSID0gbWFzay5ncHIoKTsKKyAgICAgICAgR1BS
UmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWZmZXJHUFIgPSBi
dWZmZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyBrZXlHUFIgPSBrZXkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9kZS0+
Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qobm9k
ZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhtYXBHUFIsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmpl
Y3RVc2UgPyBKU01hcDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpIDogSlNTZXQ6Om9mZnNldE9mSGFz
aE1hcEltcGwoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZDYXBhY2l0eSgpKSwgbWFza0dQUik7CisgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVmZmVy
KCkpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIG1h
c2tHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGhhc2hHUFIsIGluZGV4R1BSKTsKKworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc2xvd1BhdGhDYXNlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGxv
b3BBcm91bmQ7CisKKyAgICAgICAgbV9qaXQuYW5kMzIobWFza0dQUiwgaW5kZXhHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyR1BSLCBp
bmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBidWNrZXRHUFIpOworICAgICAg
ICBtX2ppdC5tb3ZlKGJ1Y2tldEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBub3RQcmVz
ZW50SW5UYWJsZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSk7CisgICAgICAgIGxvb3BB
cm91bmQuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAg
ICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkpKSk7CisKKyAgICAgICAg
bV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkpLCBidWNrZXRHUFIpOwor
CisgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAgZG9uZS5hcHBlbmQobV9q
aXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRHUFIsIGtleUdQUikpOyAv
LyBUaGV5J3JlIGRlZmluaXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdlIGZvdW5kIHRoZSBidWNrZXQg
d2Ugd2VyZSBsb29raW5nIGZvciEKKyAgICAgICAgYXV0byBvbmVJc250Q2VsbCA9IG1faml0LmJy
YW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKTsKKyAgICAgICAgLy8gZmlyc3Qg
aXMgYSBjZWxsIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElm
Tm90Q2VsbChKU1ZhbHVlUmVncyhrZXlHUFIpKSk7CisgICAgICAgIC8vIEJvdGggYXJlIGNlbGxz
IGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYnVja2V0R1BS
LCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUp
KSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZyBoZXJlLgorICAgICAgICBzbG93
UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwKKyAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGtleUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAvLyBUaGUgZmly
c3QgaXMgYSBzdHJpbmcsIGJ1dCB0aGUgc2Vjb25kIGlzIG5vdCwgd2UgY29udGludWUgdG8gbG9v
cCBhcm91bmQuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAg
ICAgICAgb25lSXNudENlbGwubGluaygmbV9qaXQpOworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IGRvbmUgYSA2NC1iaXQgY29tcGFyZSBhdCB0aGlzIHBvaW50LCBzbyBpZiBvbmUgaXMgbm90IGEg
bnVtYmVyLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVxdWFsLgorICAgICAgICBsb29wQXJvdW5k
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihidWNrZXRHUFIpKTsKKyAgICAgICAgbG9v
cEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoa2V5R1BSKSk7CisgICAgICAg
IC8vIEJvdGggYXJlIGRlZmluaXRlbHkgbnVtYmVycy4gSWYgd2Ugc2VlIGEgZG91YmxlLCB3ZSBn
byB0byB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5i
cmFuY2hJZk5vdEludDMyKGJ1Y2tldEdQUikpOworICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGtleUdQUikpOworICAgICAgICAKKyAgICAgICAgbG9v
cEFyb3VuZC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3AsICZtX2ppdCk7
CisKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNw
aWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgLy8gRklYTUU6IHdlJ3ZlIGFscmVh
ZHkgaGFzaGVkLCBsZXRzIGp1c3QgcGFzcyBpbiBhbGwgdGhlIHN0YXRlIHRvIHRoZSBmaW5kQnVj
a2V0IGZ1bmN0aW9uLgorICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1h
cE9iamVjdFVzZSkKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBGaW5k
QnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BSKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwg
bWFwR1BSLCBrZXlHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BS
KTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RQcmVzZW50SW5UYWJsZS5saW5rKCZtX2ppdCk7
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkRnJvbUpTTWFw
QnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdEJ1Y2tldCA9IG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQUik7CisgICAgICAgIG1f
aml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFsdWUoKSksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RCdWNr
ZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5TWFw
QnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJlUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRHUFIp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgSXNPYmplY3Q6IHsKICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MTMsNiArMzYxMyw1MyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlSXNKU0FycmF5KE5vCiAgICAgYmxlc3NlZEJvb2xlYW5SZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU1hcEhhc2goTm9k
ZSogbm9kZSkKK3sKKyAgICAvLyBGSVhNRTogd2UgYXJlIGN1cnJlbnRseSBzbG93ZXIgaW4gdGhl
IGNhc2Ugd2hlcmUgd2UgaGF2ZSB0byBjYWxsIGludG8gQyB0byBoYXNoIHRoZSBzdHJpbmcuCisg
ICAgLy8gV2Ugc2hvdWxkIGhhdmUgYSBzdHJpbmcgYXJndW1lbnQgZmFzdCBwYXRoIHRoYXQgYXZv
aWRzIGNoZWNrcyEKKworICAgIEFTU0VSVChub2RlLT5vcCgpID09IE1hcEhhc2gpOworCisgICAg
SlNWYWx1ZU9wZXJhbmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgYXV0byBpc05vdENlbGwgPSBt
X2ppdC5icmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCBzbG93UGF0aDsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaDgoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhpbnB1dEdQUiwg
SlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkp
OworICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpT
U3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsK
KyAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJp
bmdJbXBsOjpmbGFnc09mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC51cnNoaWZ0NjQo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgcmVzdWx0R1BSKTsKKyAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRH
UFIpKTsKKyAgICBhdXRvIGRvbmUyID0gbV9qaXQuanVtcCgpOworCisgICAgaXNOb3RDZWxsLmxp
bmsoJm1faml0KTsKKyAgICBzdHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVt
YmVyKGlucHV0R1BSKSk7CisgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2hJZklu
dDMyKEpTVmFsdWVSZWdzKGlucHV0R1BSKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5q
dW1wKCkpOworCisgICAgc3RyYWlnaHRIYXNoLmxpbmsoJm1faml0KTsKKyAgICBtX2ppdC5tb3Zl
KGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgIG1faml0LmpzTWFwSGFzaChyZXN1bHRHUFIsIHRl
bXBHUFIpOworICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgIHNsb3dQYXRoLmxp
bmsoJm1faml0KTsKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAg
IGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwgcmVzdWx0R1BSLCBpbnB1dEdQUik7Cisg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIG1faml0LmV4Y2VwdGlv
bkNoZWNrKCk7CisKKyAgICBkb25lMi5saW5rKCZtX2ppdCk7CisgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKK30KKwogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqIG5vZGUpCiB7CiAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNzM4MSw2ICs3NDI4LDM0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVJlZ0V4cE9iamUKICAgICBzcGVjdWxh
dGVSZWdFeHBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKQoreworICAg
IHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNwZWNNYXBPYmplY3QsIEpTTWFwVHlwZSk7
Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2Up
Cit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjTWFwT2JqZWN0KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdl
KTsKKyAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7Cit9CisKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UsIEdQUlJlZyBj
ZWxsKQoreworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNwZWNTZXRPYmplY3Qs
IEpTU2V0VHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVNldE9iamVj
dChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjU2V0T2Jq
ZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIo
KSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRn
ZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVjdCB8IFNw
ZWNPdGhlcikpCkBAIC03NjY4LDYgKzc3NDMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICBzcGVj
dWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWFwT2Jq
ZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRn
ZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAy
MDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkzLDE0ICs5MywxNCBAQCBwcml2YXRlOgogICAgIC8vIHRoZSBy
ZWdpc3RlciBhbGxvY2F0b3IuCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBlbnVtIFNwaWxsT3Jk
ZXIgewotICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQgPSAxLCAvLyBubyBzcGlsbCwgYW5kIGNo
ZWFwIGZpbGwKLSAgICAgICAgU3BpbGxPcmRlclNwaWxsZWQgID0gMiwgLy8gbm8gc3BpbGwKLSAg
ICAgICAgU3BpbGxPcmRlckpTICAgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3Bp
bGxPcmRlckNlbGwgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlclN0
b3JhZ2UgID0gNCwgLy8gbmVlZHMgc3BpbGwKLSAgICAgICAgU3BpbGxPcmRlckludGVnZXIgID0g
NSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAotICAgICAgICBTcGlsbE9yZGVyQm9vbGVhbiAgPSA1
LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Ci0gICAgICAgIFNwaWxsT3JkZXJEb3VibGUgICA9IDYs
IC8vIG5lZWRzIHNwaWxsIGFuZCBjb252ZXJ0CisgICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCAg
PSAxLCAvLyBubyBzcGlsbCwgYW5kIGNoZWFwIGZpbGwKKyAgICAgICAgU3BpbGxPcmRlclNwaWxs
ZWQgICA9IDIsIC8vIG5vIHNwaWxsCisgICAgICAgIFNwaWxsT3JkZXJKUyAgICAgICAgPSA0LCAv
LyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVyQ2VsbCAgICAgID0gNCwgLy8gbmVlZHMg
c3BpbGwKKyAgICAgICAgU3BpbGxPcmRlclN0b3JhZ2UgICA9IDQsIC8vIG5lZWRzIHNwaWxsCisg
ICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Cisg
ICAgICAgIFNwaWxsT3JkZXJCb29sZWFuICAgPSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Cisg
ICAgICAgIFNwaWxsT3JkZXJEb3VibGUgICAgPSA2LCAvLyBuZWVkcyBzcGlsbCBhbmQgY29udmVy
dAogICAgIH07CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQogICAgIGVudW0gU3BpbGxPcmRlciB7
CkBAIC01MTksNyArNTE5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gVGhpcyBpcyBzcGVj
aWFsLCBzaW5jZSBpdCdzIG5vdCBhIEpTIHZhbHVlIC0gYXMgaW4gaXQncyBub3QgdmlzaWJsZSB0
byBKUwogICAgICAgICAgICAgLy8gY29kZS4KICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGlu
Zm8uZ3ByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHNwaWxsTWUpKTsKLSAgICAgICAgICAg
IGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBEYXRhRm9ybWF0U3RvcmFnZSk7CisgICAg
ICAgICAgICBpbmZvLnNwaWxsKCptX3N0cmVhbSwgc3BpbGxNZSwgc3BpbGxGb3JtYXQpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTc1Niw2ICs3NTYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjb21waWxlSW5zdGFuY2VPZkN1c3RvbShOb2RlKik7CiAKICAgICB2b2lkIGNv
bXBpbGVJc0pTQXJyYXkoTm9kZSopOworICAgIHZvaWQgY29tcGlsZU1hcEhhc2goTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUlzUmVnRXhwT2JqZWN0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVJ
c1R5cGVkQXJyYXlWaWV3KE5vZGUqKTsKIApAQCAtMTE5Nyw2ICsxMTk4LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CiAgICAgfQor
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUNKIG9w
ZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQorICAgIHsK
KyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwor
ICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7Cisg
ICAgfQogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlv
bl9FQ0laQyBvcGVyYXRpb24sIEdQUlJlZyByZWdPcDEsIFVuaXF1ZWRTdHJpbmdJbXBsKiBpZGVu
dE9wMiwgaW50MzJfdCBvcDMsIEdQUlJlZyByZWdPcDQpCiAgICAgewpAQCAtMTY3MSw2ICsxNjc3
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAg
ICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9u
X0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAgeworICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAgICAgIHJldHVy
biBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAgICBK
SVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VKWlogb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMiwgdW5zaWduZWQg
YXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7CkBAIC0yNjU2LDYg
KzI2NjgsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlRmluYWxPYmplY3QoRWRnZSk7
CiAgICAgdm9pZCBzcGVjdWxhdGVSZWdFeHBPYmplY3QoRWRnZSwgR1BSUmVnIGNlbGwpOwogICAg
IHZvaWQgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTWFw
T2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UsIEdQUlJlZyBj
ZWxsKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNwZWN1
bGF0ZVNldE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmpl
Y3RPck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UgZWRnZSwgR1BS
UmVnIGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRMb2FkU3RvcmFnZShF
ZGdlIGVkZ2UsIEdQUlJlZyBzdHJpbmcsIEdQUlJlZyBzdG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTQsNiArOTQsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZQog
ICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQoIlJlZ0V4cE9iamVj
dCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIG91
dC5wcmludCgiTWFwT2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNldE9i
amVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJTZXRPYmplY3RVc2UiKTsKKyAgICAgICAgcmV0
dXJuOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgb3V0LnByaW50KCJPYmpl
Y3RPck90aGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBlbnVt
IFVzZUtpbmQgewogICAgIEtub3duU3RyaW5nVXNlLAogICAgIEtub3duUHJpbWl0aXZlVXNlLCAv
LyBUaGlzIGJpemFycmUgdHlwZSBhcmlzZXMgZm9yIG9wX3N0cmNhdCwgd2hpY2ggaGFzIGEgYnl0
ZWNvZGUgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBvbmx5IHNlZSBwcmltaXRpdmVzIChpLmUuIG5v
dCBvYmplY3RzKS4KICAgICBTeW1ib2xVc2UsCisgICAgTWFwT2JqZWN0VXNlLAorICAgIFNldE9i
amVjdFVzZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAgU3RyaW5nT3JTdHJpbmdPYmplY3RV
c2UsCiAgICAgTm90U3RyaW5nVmFyVXNlLApAQCAtMTM0LDYgKzEzNiwxMCBAQCBpbmxpbmUgU3Bl
Y3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgICAgIHJldHVybiBTcGVjSGVhcFRv
cCAmIH5TcGVjT2JqZWN0OwogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgICAgICByZXR1cm4gU3Bl
Y1N5bWJvbDsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNNYXBP
YmplY3Q7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHJldHVybiBTcGVjU2V0T2Jq
ZWN0OwogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY1N0cmlu
Z09iamVjdDsKICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgpAQCAtMjIxLDYgKzIy
Nyw4IEBAIGlubGluZSBib29sIGlzQ2VsbChVc2VLaW5kIGtpbmQpCiAgICAgY2FzZSBTeW1ib2xV
c2U6CiAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09i
amVjdFVzZToKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICBjYXNlIFNldE9iamVjdFVzZToK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw4IEBACiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiRlRMQWJz
dHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSlNNYXAu
aCIKKyNpbmNsdWRlICJKU1NldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CiAKQEAgLTEwMiw3ICsxMDQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
ICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0
KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2Jh
bE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3Byb3RvdHlwZSwgU3RydWN0
dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJ
RCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQorICAgIG1hY3JvKFN0cnVjdHVyZV9z
dHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCisgICAgbWFjcm8o
SlNNYXBfaGFzaE1hcEltcGwsIEpTTWFwOjpvZmZzZXRPZkhhc2hNYXBJbXBsKCkpIFwKKyAgICBt
YWNybyhKU1NldF9oYXNoTWFwSW1wbCwgSlNTZXQ6Om9mZnNldE9mSGFzaE1hcEltcGwoKSkgXAor
ICAgIG1hY3JvKEhhc2hNYXBJbXBsX2NhcGFjaXR5LCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQ2FwYWNpdHkoKSkgXAorICAgIG1hY3Jv
KEhhc2hNYXBJbXBsX2J1ZmZlciwgIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNr
ZXRfdmFsdWUsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNl
dE9mVmFsdWUoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNrZXRfa2V5LCBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpKSBcCiAKICNkZWZpbmUg
Rk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAgbWFjcm8oRGlyZWN0
QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw2
ICsxODAsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAg
IGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNh
c2UgSXNKU0FycmF5OgorICAgIGNhc2UgTWFwSGFzaDoKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDoK
KyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVj
a2V0OgogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNhc2Ug
SXNCb29sZWFuOgpAQCAtNDc1LDYgKzQ3OSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICAgICAg
ICAgIGNhc2UgU3ltYm9sVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWFwT2JqZWN0VXNlOgor
ICAgICAgICAgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2Ug
RmluYWxPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CiAg
ICAgICAgICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MCw2ICs3MCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
R2VuZXJhdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgor
I2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIK
QEAgLTg5OCw2ICs4OTksMTggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJc0pTQXJyYXk6CiAg
ICAgICAgICAgICBjb21waWxlSXNKU0FycmF5KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBNYXBIYXNoOgorICAgICAgICAgICAgY29tcGlsZU1hcEhhc2goKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICAgICAgICAgIGNvbXBp
bGVHZXRNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExvYWRG
cm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIGNvbXBpbGVJc05vbkVtcHR5TWFwQnVja2V0KCk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgICAgIGNvbXBpbGVJc09iamVj
dCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MzU1LDYgKzYzNjgsMjI4IEBAIHByaXZhdGU6
CiAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBjZWxs
UmVzdWx0KSk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlTWFwSGFzaCgpCisgICAgeworICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAg
ICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBub3RDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzdHJh
aWdodEhhc2ggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc051bWJl
ckNhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmluZ0Nh
c2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub25FbXB0eVN0cmlu
Z0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3VyZShp
c0NlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CisgICAgICAg
IExWYWx1ZSBpc1N0cmluZyA9IG1fb3V0LmVxdWFsKG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZhbHVl
LCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLCBtX291dC5jb25zdEludDMyKFN0cmluZ1R5
cGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNTdHJpbmcsIHVuc3Vy
ZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBub25FbXB0eVN0cmluZ0Nhc2UpOworICAgICAgICBMVmFs
dWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMuSlNTdHJpbmdfdmFs
dWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVhbChzdHJp
bmdJbXBsLCBtX291dC5jb25zdEludFB0cigwKSksIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHko
bm9uRW1wdHlTdHJpbmdDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRW1wdHlT
dHJpbmdDYXNlLCBub3RDZWxsKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBtX291dC5sU2hyKG1f
b3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdzKSwg
bV9vdXQuY29uc3RJbnQzMig2KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vbkVtcHR5U3Ry
aW5nSGFzaFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmVxdWFsKGhhc2gsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAorICAgICAgICAgICAgcmFy
ZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhub3RDZWxsLCBpc051bWJlckNhc2UpOworICAgICAgICBtX291dC5icmFuY2goCisg
ICAgICAgICAgICBpc051bWJlcih2YWx1ZSksIHVuc3VyZShpc051bWJlckNhc2UpLCB1bnN1cmUo
c3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNOdW1iZXJDYXNlLCBz
dHJhaWdodEhhc2gpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0ludDMy
KHZhbHVlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCksIHVuc3VyZShzbG93Q2FzZSkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKHN0cmFpZ2h0SGFzaCwgc2xvd0Nhc2UpOworICAgICAgICAvLyBr
ZXkgKz0gfihrZXkgPDwgMzIpOworICAgICAgICBMVmFsdWUga2V5ID0gdmFsdWU7CisgICAgICAg
IExWYWx1ZSB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0
LmNvbnN0SW50MzIoMzIpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAg
ICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5
ID4+IDIyKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIo
dGVtcCwgbV9vdXQuY29uc3RJbnQzMigyMikpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Io
a2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAgdGVt
cCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMy
KDEzKSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9
IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiA4KTsKKyAg
ICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQu
Y29uc3RJbnQzMig4KSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOwor
ICAgICAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAg
ICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMpKTsKKyAgICAgICAg
a2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDE1
KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwg
bV9vdXQuY29uc3RJbnQzMigxNSkpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0
ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICAgICAgdGVtcCA9IGtl
eTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDI3KSk7
CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0
LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgICAg
IHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0
SW50MzIoMzEpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAg
ICAgIGtleSA9IG1fb3V0LmNhc3RUb0ludDMyKGtleSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihrZXkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVh
dGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Io
CisgICAgICAgICAgICB2bUNhbGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25NYXBI
YXNoKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKEludDMyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0
LCBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVH
ZXRNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BT
dGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxvb3BBcm91bmQg
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0aCA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFByZXNlbnRJblRhYmxlID0gbV9v
dXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1wdHlWYWx1ZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdERlbGV0ZWRWYWx1ZSA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJpdEVxdWFsID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5Tm90Q2VsbCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzQ2VsbCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVDZWxscyA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzU3RyaW5nID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNOdW1iZXIgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJlTnVtYmVycyA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzSW50MzIgPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOworCisgICAgICAgIExWYWx1ZSBtYXA7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBtYXAgPSBsb3dNYXBP
YmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fbm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgIG1hcCA9IGxvd1NldE9i
amVjdChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBMVmFsdWUga2V5ID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMygpKTsKKworICAgICAgICBMVmFsdWUgaGFzaE1hcEltcGwgPSBtX291dC5sb2Fk
UHRyKG1hcCwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlID8gbV9o
ZWFwcy5KU01hcF9oYXNoTWFwSW1wbCA6IG1faGVhcHMuSlNTZXRfaGFzaE1hcEltcGwpOworICAg
ICAgICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9hZFB0cihoYXNoTWFwSW1wbCwgbV9oZWFwcy5I
YXNoTWFwSW1wbF9idWZmZXIpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LnN1YihtX291
dC5sb2FkMzIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfY2FwYWNpdHkpLCBtX291
dC5pbnQzMk9uZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhTdGFydCA9IG1fb3V0
LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0LCBub3RFbXB0
eVZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHVubWFza2VkSW5kZXggPSBtX291dC5waGkoSW50MzIs
IGluZGV4U3RhcnQpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5iaXRBbmQobWFzaywg
dW5tYXNrZWRJbmRleCk7CisgICAgICAgIExWYWx1ZSBoYXNoTWFwQnVja2V0ID0gbV9vdXQubG9h
ZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1iZXIoKSwgYnVm
ZmVyLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhhc2hNYXBCdWNrZXQp
OworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoaGFzaE1hcEJ1Y2tldCwgbV9vdXQu
Y29uc3RJbnRQdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eT4+OjplbXB0eVZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShub3RQcmVzZW50SW5UYWJs
ZSksIHVuc3VyZShub3RFbXB0eVZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
RW1wdHlWYWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkpKSwKKyAgICAg
ICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKG5vdERlbGV0ZWRWYWx1ZSkpOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERlbGV0ZWRWYWx1ZSwgbm90Qml0RXF1YWwpOworICAg
ICAgICBMVmFsdWUgYnVja2V0S2V5ID0gbV9vdXQubG9hZDY0KGhhc2hNYXBCdWNrZXQsIG1faGVh
cHMuSGFzaE1hcEJ1Y2tldF9rZXkpOworICAgICAgICAvLyBQZXJmb3JtIE9iamVjdC5pcygpCisg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtleSksCisgICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEJpdEVxdWFsKSk7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWwsIGJ1Y2tldEtleUlzQ2VsbCk7CisgICAgICAg
IG1fb3V0LmJyYW5jaChpc0NlbGwoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShidWNr
ZXRLZXlJc0NlbGwpLCB1bnN1cmUoYnVja2V0S2V5Tm90Q2VsbCkpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwgYm90aEFyZUNlbGxzKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKGlzQ2VsbChrZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJvdGhBcmVDZWxscyksIHVu
c3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm90aEFyZUNlbGxz
LCBidWNrZXRLZXlJc1N0cmluZyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyhidWNr
ZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzU3RyaW5nKSwgdW5zdXJlKGxv
b3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc1N0cmluZywg
YnVja2V0S2V5Tm90Q2VsbCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmluZyhrZXkpLAor
ICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlOb3RDZWxsLCBidWNrZXRLZXlJc051bWJlcik7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihidWNrZXRLZXkpLAorICAgICAgICAg
ICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUoYnVja2V0S2V5SXNOdW1iZXIpKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc051bWJlciwgYm90aEFyZU51bWJlcnMpOwor
ICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1iZXIoa2V5KSwKKyAgICAgICAgICAgIHVuc3Vy
ZShsb29wQXJvdW5kKSwgdW5zdXJlKGJvdGhBcmVOdW1iZXJzKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYm90aEFyZU51bWJlcnMsIGJ1Y2tldEtleUlzSW50MzIpOworICAgICAgICBtX291
dC5icmFuY2goaXNOb3RJbnQzMihidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQ
YXRoKSwgdW5zdXJlKGJ1Y2tldEtleUlzSW50MzIpKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhidWNrZXRLZXlJc0ludDMyLCBsb29wQXJvdW5kKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlz
Tm90SW50MzIoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShsb29w
QXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcEFyb3VuZCwgc2xvd1BhdGgp
OworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHVubWFza2VkSW5kZXgsIG1fb3V0LmFu
Y2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSkpOworICAgICAgICBtX291dC5q
dW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIG5vdFBy
ZXNlbnRJblRhYmxlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1BhdGhSZXN1bHQgPSBt
X291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksCisgICAgICAgICAgICBtX291dC5vcGVy
YXRpb24obV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlID8gb3BlcmF0
aW9uSlNNYXBGaW5kQnVja2V0IDogb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0KSwgbV9jYWxsRnJh
bWUsIG1hcCwga2V5KSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3RQcmVzZW50SW5UYWJsZSwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgbm90UHJlc2VudFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291
dC5jb25zdEludFB0cigwKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKwor
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAg
c2V0TWFwQnVja2V0KG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBidWNrZXRSZXN1bHQsIHNsb3dQ
YXRoUmVzdWx0LCBub3RQcmVzZW50UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxl
TG9hZEZyb21KU01hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBMVmFsdWUgbWFwQnVja2V0ID0g
bG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGhhc0J1
Y2tldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9CdWNr
ZXRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpKTsKKworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwobWFw
QnVja2V0LCBtX291dC5jb25zdEludFB0cigwKSksCisgICAgICAgICAgICB1bnN1cmUoY29udGlu
dWF0aW9uKSwgdW5zdXJlKGhhc0J1Y2tldCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaGFzQnVja2V0LCBjb250aW51YXRpb24pOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBidWNrZXRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubG9hZDY0KG1h
cEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0X3ZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGkoSW50NjQsIG5vQnVja2V0
UmVzdWx0LCBidWNrZXRSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbXBpbGVJc05vbkVt
cHR5TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBidWNrZXQgPSBsb3dNYXBCdWNr
ZXQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5ub3RF
cXVhbChidWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAgICAgICAgc2V0Qm9vbGVhbihy
ZXN1bHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0T3JOdWxsKCkKICAgICB7
CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC05OTM2LDYgKzEwMTcxLDIwIEBA
IHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCByZXN1bHQpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExWYWx1ZSBsb3dNYXBPYmplY3Qo
RWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7
CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCByZXN1bHQpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIExWYWx1ZSBsb3dTZXRPYmplY3QoRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNw
ZWN1bGF0ZU1hcE9iamVjdChlZGdlLCByZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KICAgICAKICAgICBMVmFsdWUgbG93U3RyaW5nKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgIHsKQEAg
LTEwMDU5LDYgKzEwMzA4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5u
b2RlKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgTFZh
bHVlIGxvd01hcEJ1Y2tldChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBMb3dlcmVkTm9kZVZh
bHVlIHZhbHVlID0gbV9tYXBCdWNrZXRWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
aWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7Cisg
ICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChlZGdlKTsKKyAgICAgICAg
c2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CiAgICAgCiAgICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQzMihFZGdlIGVkZ2UsIExW
YWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0xMDM2Miw2ICsxMDYyMiwxMiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9i
amVjdChlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hcE9iamVjdFVz
ZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZVNl
dE9iamVjdChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0cmluZ1Vz
ZToKICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMTA2OTAsNiArMTA5NTYsMjggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHNwZWN1
bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKICAgICB9CisKKyAgICB2b2lk
IHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQorICAgIHsKKyAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Us
IFNwZWNNYXBPYmplY3QsIGlzTm90VHlwZShjZWxsLCBKU01hcFR5cGUpKTsKKyAgICB9CisKKyAg
ICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBzcGVj
dWxhdGVNYXBPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAgfQorCisgICAgdm9pZCBz
cGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAg
IEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBT
cGVjU2V0T2JqZWN0LCBpc05vdFR5cGUoY2VsbCwgSlNTZXRUeXBlKSk7CisgICAgfQorCisgICAg
dm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3Vs
YXRlU2V0T2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAgIH0KICAgICAKICAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQogICAgIHsKQEAgLTExNDU4
LDYgKzExNzQ2LDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMu
c2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CiAgICAgfQor
ICAgIHZvaWQgc2V0TWFwQnVja2V0KE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fbWFwQnVja2V0VmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVl
LCBtX2hpZ2hCbG9jaykpOworICAgIH0KICAgICB2b2lkIHNldERvdWJsZShOb2RlKiBub2RlLCBM
VmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBtX2RvdWJsZVZhbHVlcy5zZXQobm9kZSwgTG93
ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKQEAgLTExNDkxLDYgKzExNzgzLDEw
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXRTdG9yYWdlKG1fbm9kZSwgdmFsdWUpOwog
ICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBzZXRNYXBCdWNrZXQobV9ub2RlLCB2YWx1ZSk7CisgICAgfQogICAgIHZvaWQgc2V0RG91Ymxl
KExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldERvdWJsZShtX25vZGUsIHZhbHVlKTsK
QEAgLTExNjc0LDYgKzExOTcwLDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dl
cmVkTm9kZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJl
ZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWRO
b2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX21hcEJ1Y2tldFZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9k
ZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKICAgICAKICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEg
aGFjay4gSXQgcHJldmVudHMgQjMgZnJvbSBoYXZpbmcgdG8gZG8gQ1NFIG9uIGxvYWRpbmcgb2Yg
YXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBl
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjYsNiArNjI2LDUwIEBA
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwKICAgICAgICAgfSk7CiB9
CiAKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqc01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0
LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBHUFJSZWcgaW5wdXQgPSBpbnB1dEFuZFJlc3VsdDsK
KyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOwor
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzMiksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0
Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAy
Mik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0z
MigyMiksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkg
Kz0gfihrZXkgPDwgMTMpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0
KFRydXN0ZWRJbW0zMigxMyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFk
ZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiA4KTsKKyAgICBtb3Zl
KGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDgpLCBzY3JhdGNo
KTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7
CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMp
LCBzY3JhdGNoKTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChr
ZXkgPj4gMTUpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMTUpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAg
Ly8ga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMjcpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsK
KyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gMzEpOwor
ICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoMzEp
LCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisKKyAgICAvLyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2NChUcnVzdGVk
SW1tUHRyKG1hc2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NFUlQobV9iYXNlbGluZUNvZGVCbG9jay0+aml0
VHlwZSgpID09IEpJVENvZGU6Ok5vbmUgfHwgSklUQ29kZTo6aXNCYXNlbGluZUNvZGUobV9iYXNl
bGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICB2b2lk
IGpzTWFwSGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKTsKICAgICAK
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAg
Vk0qIHZtKCkgeyByZXR1cm4gbV92bTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNiArMTk0LDcg
QEAgdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZQogdHlwZWRlZiBKU0Nl
bGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FU3RaWikoRXhlY1N0YXRlKiwgU3Ry
dWN0dXJlKiwgaW50MzJfdCwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJ
T04gKkNfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlND
ZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUpzY0kpKEV4ZWNTdGF0ZSosIEpT
U2NvcGUqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFU
SU9OICpDX0pJVE9wZXJhdGlvbl9FQ0opKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9EKShk
b3VibGUpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0cp
KEpTR2xvYmFsT2JqZWN0Kik7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRP
cGVyYXRpb25fREQpKGRvdWJsZSwgZG91YmxlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisKKyNpbmNs
dWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMu
aCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3RlbXBsYXRlPD4KK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5Pjo6c19pbmZvID0KKyAgICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsK
K3RlbXBsYXRlPD4KK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgordm9pZCBIYXNoTWFwQnVja2V0
PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0
Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9wcmV2KTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEp
ICUgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gMCwgIldlIGFzc3VtZSB0aGF0IHRo
ZXNlIGFyZSBmaWxsZWQgd2l0aCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbWVtYmVycyBvbmx5LiIp
OworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5r
bm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRl
QmFycmllcjxVbmtub3duPikpOworfQorCit0ZW1wbGF0ZTw+Citjb25zdCBDbGFzc0luZm8gSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpzX2luZm8gPQor
ICAgIHsgIkhhc2hNYXBJbXBsIiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4pIH07Cit0ZW1wbGF0
ZTw+Citjb25zdCBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVj
a2V0RGF0YUtleVZhbHVlPj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRy
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT4+KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1
Y2tldD4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhp
c09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVu
KHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1faGVhZCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAg
ICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4s
IHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRl
cygpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hN
YXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29w
eVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFj
a2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09IE1h
cEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNP
YmplY3QtPm1fYnVmZmVyLmdldCgpKSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogb2xk
QnVmZmVyID0gdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZm
ZXJTaXplSW5CeXRlcyA9IHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAg
IEhhc2hNYXBCdWZmZXJUeXBlKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVy
VHlwZSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOworICAg
ICAgICBtZW1jcHkobmV3QnVmZmVyLCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAg
ICAgICAgdGhpc09iamVjdC0+bV9idWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVyKTsK
KyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOwor
ICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBIYXNoTWFwQnVja2V0RGF0
YUtleSB7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IGtleTsKK307CisKK3N0cnVjdCBIYXNo
TWFwQnVja2V0RGF0YUtleVZhbHVlIHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5Owor
ICAgIFdyaXRlQmFycmllcjxVbmtub3duPiB2YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBEYXRhPgorY2xhc3MgSGFzaE1hcEJ1Y2tldCA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVk
ZWYgSlNDZWxsIEJhc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAg
c3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVj
a2V0RGF0YUtleT46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0m
IHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUu
Z2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tl
dERhdGFLZXlWYWx1ZT46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUo
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1
cmUuZ2V0KCk7CisgICAgfQorCitwdWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBw
cm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0KiBjcmVhdGUoVk0m
IHZtKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEJ1Y2tldD4odm0uaGVhcCkpIEhhc2hNYXBCdWNrZXQodm0s
IHNlbGVjdFN0cnVjdHVyZSh2bSkpOworICAgICAgICBidWNrZXQtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWJ1Y2tldC0+bmV4dCgpKTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWJ1Y2tldC0+cHJldigpKTsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAg
ICB9CisKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgSGFzaE1hcEJ1Y2tldChWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
KyAgICB7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXROZXh0KFZNJiB2bSwgSGFzaE1h
cEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgbV9uZXh0LnNldCh2bSwgdGhpcywgYnVj
a2V0KTsKKyAgICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFByZXYoVk0mIHZtLCBIYXNo
TWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICBtX3ByZXYuc2V0KHZtLCB0aGlzLCBi
dWNrZXQpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRLZXkoVk0mIHZtLCBK
U1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIG1fZGF0YS5rZXkuc2V0KHZtLCB0aGlzLCBrZXkp
OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNf
SU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVj
a2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHNldFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fZGF0YS52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsK
KyAgICB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXRE
YXRhS2V5Pjo6dmFsdWU+Ojp0eXBlIHNldFZhbHVlKFZNJiwgSlNWYWx1ZSkgeyB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIEpTVmFsdWUga2V5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmtleS5nZXQo
KTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJ
TkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+Ojp2YWx1ZSwgSlNWYWx1ZT46OnR5cGUgdmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBBTFdBWVNf
SU5MSU5FIEhhc2hNYXBCdWNrZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7
IH0KKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVy
biBtX3ByZXYuZ2V0KCk7IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBkZWxldGVkKCkgY29u
c3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldERlbGV0
ZWQoYm9vbCBkZWxldGVkKSB7IG1fZGVsZXRlZCA9IGRlbGV0ZWQ7IH0KKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZLZXkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihIYXNoTWFwQnVja2V0LCBtX2RhdGEpICsgT0JKRUNUX09GRlNFVE9GKERhdGEsIGtleSk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT46OnZhbHVlLCBwdHJkaWZmX3Q+Ojp0eXBlIG9mZnNldE9mVmFsdWUoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBtX2RhdGEpICsg
T0JKRUNUX09GRlNFVE9GKERhdGEsIHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0
YSBtX2RhdGE7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1fbmV4dDsKKyAgICBX
cml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9wcmV2OworICAgIGJvb2wgbV9kZWxldGVkIHsg
ZmFsc2UgfTsKKworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEJ1Y2tldFR5cGU+CitjbGFzcyBI
YXNoTWFwQnVmZmVyIHsKK3B1YmxpYzoKKyAgICBIYXNoTWFwQnVmZmVyKCkgPSBkZWxldGU7CisK
KyAgICBzdGF0aWMgc2l6ZV90IGFsbG9jYXRpb25TaXplKHVpbnQzMl90IGNhcGFjaXR5KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGNhcGFjaXR5ICogc2l6ZW9mKEJ1Y2tldFR5cGUqKTsKKyAgICB9
CisKKyAgICBCdWNrZXRUeXBlKiogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8QnVja2V0VHlwZSoqPih0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
SGFzaE1hcEJ1ZmZlciogY3JlYXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdWludDMyX3QgY2Fw
YWNpdHkpCisgICAgeworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFwQnVm
ZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSk7CisgICAgICAgIHZvaWQqIGRhdGEgPSBudWxs
cHRyOworICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyKHZtLmhlYXApOworICAgICAgICBp
ZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG93bmVyLCBhbGxvY2F0aW9uU2l6ZSwgJmRh
dGEpKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gIEZJWE1F
OiB0aHJvdyBhbiBleGNlcHRpb24gaGVyZS4KKyAgICAgICAgSGFzaE1hcEJ1ZmZlciogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlcio+KGRhdGEpOworICAgICAgICBtZW1zZXQoYnVm
ZmVyLCAtMSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0K
KworfTsKKworQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBhcmVLZXlzRXF1YWwoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICAvLyBXZSB3YW50ICswIGFuZCAt
MCB0byBiZSBjb21wYXJlZCB0byB0cnVlIGhlcmUuIHNhbWVWYWx1ZSgpIGl0c2VsZiBkb2Vzbid0
CisgICAgLy8gZ3VhcmFudGVlIHRoYXQsIGhvd2V2ZXIsIHdlIG5vcm1hbGl6ZSBhbGwga2V5cyBi
ZWZvcmUgY29tcGFyaW5nIGFuZCBzdG9yaW5nCisgICAgLy8gdGhlbSBpbiB0aGUgbWFwLiBUaGUg
bm9ybWFsaXphdGlvbiB3aWxsIGNvbnZlcnQgLTAuMCBhbmQgMC4wIHRvIHRoZSBpbnRlZ2VyCisg
ICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIDAuCisgICAgcmV0dXJuIHNhbWVWYWx1ZShleGVjLCBh
LCBiKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVl
IGtleSkKK3sKKyAgICBpZiAoIWtleS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4ga2V5Owor
CisgICAgaWYgKGtleS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBkb3Vi
bGUgZCA9IGtleS5hc0RvdWJsZSgpOworICAgIGlmIChzdGQ6OmlzbmFuKGQpKQorICAgICAgICBy
ZXR1cm4ga2V5OworCisgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgIGlmIChp
ID09IGQpIHsKKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyAtMCwgd2UgY29udmVydCBpdCB0byBw
b3NpdGl2ZSB6ZXJvLgorICAgICAgICAvLyBXaGVuIGEga2V5IGlzIHRoZSBkb3VibGUgcmVwcmVz
ZW50YXRpb24gZm9yIGFuIGludGVnZXIsIHdlIGNvbnZlcnQgaXQgdG8gYW4gaW50ZWdlci4KKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGkpOworICAgIH0KKyAgICAvLyBUaGlzIG1lYW5zIGtleSBp
cyBkZWZpbml0ZWx5IG5vdCBuZWdhdGl2ZSB6ZXJvLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5vdCBh
IGRvdWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiAKKyAgICByZXR1cm4ga2V5Owor
fQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVNYXBLZXko
dmFsdWUpID09IHZhbHVlLCAiV2UgZXhwZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50
byB0aGlzIGZ1bmN0aW9uLiIpOworCisgICAgaWYgKHZhbHVlLmlzRG91YmxlKCkpIHsKKyAgICAg
ICAgZG91YmxlIGQgPSB2YWx1ZS5hc0RvdWJsZSgpOworICAgICAgICBpZiAoIXN0ZDo6aXNuYW4o
ZCkpIHsKKyAgICAgICAgICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKKyAgICAgICAg
ICAgIGlmIChpID09IGQpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBqc051bWJlcihpKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgeworICAgICAgICBKU1N0
cmluZyogc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgICAgICBjb25zdCBTdHJpbmcmIHd0
ZlN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgICAgIGlmIChVTkxJS0VMWShleGVj
LT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7CisgICAgICAg
IHJldHVybiB3dGZTdHJpbmcuaW1wbCgpLT5oYXNoKCk7CisgICAgfQorICAgIHVpbnQ2NF90IHJh
d1ZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICByZXR1cm4gV1RGOjppbnRIYXNo
KHJhd1ZhbHVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBlPgor
Y2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICB0eXBlZGVmIEpTQ2VsbCBC
YXNlOworICAgIHR5cGVkZWYgSGFzaE1hcEJ1ZmZlcjxIYXNoTWFwQnVja2V0VHlwZT4gSGFzaE1h
cEJ1ZmZlclR5cGU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IEhhc2hNYXBCdWNrZXRU
eXBlPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwg
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojp2YWx1ZSwgU3RydWN0dXJlKj46
OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5o
YXNoTWFwSW1wbFNldFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVCA9IEhhc2hNYXBCdWNrZXRUeXBlPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eVZhbHVlPj46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBJbXBsTWFwU3RydWN0dXJlLmdldCgp
OworICAgIH0KKworcHVibGljOgorICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1
Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxU
eXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hN
YXBJbXBsKiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoCisg
ICAgICAgICAgICBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6b2Zmc2V0T2ZL
ZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRP
ZktleSgpKTsKKworICAgICAgICBIYXNoTWFwSW1wbCogaW1wbCA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEhhc2hNYXBJbXBsPih2bS5oZWFwKSkgSGFzaE1hcEltcGwodm0sIHNlbGVjdFN0
cnVjdHVyZSh2bSkpOworICAgICAgICBpbXBsLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IHJldHVybiBpbXBsOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAgICAsIG1fZGVsZXRlQ291bnQoMCkKKyAgICAgICAg
LCBtX2NhcGFjaXR5KDQpCisgICAgeworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiog
YnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5nZXQoKS0+YnVm
ZmVyKCk7CisgICAgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCisgICAgewor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICAgICAgbV9idWZmZXIuc2V0
KHZtLCB0aGlzLCBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRlKHZtLCB0aGlzLCBtX2NhcGFjaXR5
KSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAgICAgICAgICAgIEFTU0VS
VChpc0VtcHR5KGJ1ZmZlcigpW2ldKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTog
c29tZSBraW5kIG9mIHdyaXRlIGJhcnJpZXIgb24gb3VyIG93bmVyPworICAgICAgICBtX2hlYWQu
c2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1f
dGFpbC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKKworICAg
ICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+
c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9oZWFkLT5zZXREZWxldGVkKHRy
dWUpOworICAgICAgICBtX3RhaWwtPnNldERlbGV0ZWQodHJ1ZSk7CisKKyAgICB9CisKKyAgICBz
dGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUqIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0VHlwZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oLTEpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRW1wdHko
SGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNrZXQg
PT0gZW1wdHlWYWx1ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0VHlwZSog
ZGVsZXRlZFZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFzaE1h
cEJ1Y2tldFR5cGUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0zKSk7CisgICAgfQorCisgICAg
c3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0RlbGV0ZWQoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1
Y2tldCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNrZXQgPT0gZGVsZXRlZFZhbHVlKCk7Cisg
ICAgfQorCisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tl
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAga2V5ID0gbm9y
bWFsaXplTWFwS2V5KGtleSk7CisKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2Fw
YWNpdHkgLSAxOworICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBrZXkp
ICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZm
ZXIoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07
CisKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgICAgIGlmICgh
aXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVja2V0LT5rZXko
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciArIGluZGV4OworICAgICAgICAgICAg
aW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJb
aW5kZXhdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
KyAgICB7CisgICAgICAgIGlmIChIYXNoTWFwQnVja2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNr
ZXQoZXhlYywga2V5KSkKKyAgICAgICAgICAgIHJldHVybiAoKmJ1Y2tldCktPnZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJl
dHVybiAhIWZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlKCkpCisgICAgeworICAgICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5KTsKKwor
ICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNr
ID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4
ZWMsIGtleSkgJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRo
aXMtPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVy
W2luZGV4XTsKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgICAg
IGlmICghaXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVja2V0
LT5rZXkoKSkpIHsKKyAgICAgICAgICAgICAgICBidWNrZXQtPnNldFZhbHVlKHZtLCB2YWx1ZSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5k
ZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJbaW5k
ZXhdOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5ld0VudHJ5ID0g
bV90YWlsLmdldCgpOworICAgICAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgICAg
IG5ld0VudHJ5LT5zZXRLZXkodm0sIGtleSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRWYWx1ZSh2
bSwgdmFsdWUpOworICAgICAgICBuZXdFbnRyeS0+c2V0RGVsZXRlZChmYWxzZSk7CisgICAgICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiBuZXdUYWlsID0gSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2
bSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOworICAgICAgICBuZXdU
YWlsLT5zZXRQcmV2KHZtLCBuZXdFbnRyeSk7CisgICAgICAgIG5ld1RhaWwtPnNldERlbGV0ZWQo
dHJ1ZSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXROZXh0KHZtLCBuZXdUYWlsKTsKKyAgICAgICAg
dWludDMyX3QgbmV3U2l6ZSA9ICsrbV9zaXplOworICAgICAgICBpZiAoMipuZXdTaXplID4gbV9j
YXBhY2l0eSkKKyAgICAgICAgICAgIHJlaGFzaChleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgewor
ICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5
KTsKKyAgICAgICAgaWYgKCFidWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgLy8gRklYTUU6IHN0b3AgbGVha2lu
ZyBtZW1vcnkgaGVyZSwgYW5kIGZpZ3VyZSBvdXQgaXRlcmF0b3JzLgorICAgICAgICBIYXNoTWFw
QnVja2V0VHlwZSogaW1wbCA9ICpidWNrZXQ7CisgICAgICAgIGltcGwtPm5leHQoKS0+c2V0UHJl
dih2bSwgaW1wbC0+cHJldigpKTsKKyAgICAgICAgaW1wbC0+cHJldigpLT5zZXROZXh0KHZtLCBp
bXBsLT5uZXh0KCkpOworICAgICAgICBpbXBsLT5zZXREZWxldGVkKHRydWUpOworCisgICAgICAg
ICpidWNrZXQgPSBkZWxldGVkVmFsdWUoKTsKKworICAgICAgICBtX2RlbGV0ZUNvdW50Kys7CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRl
KiBleGVjKQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgICAgICBt
X2NhcGFjaXR5ID0gbV9jYXBhY2l0eSAqIDI7CisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhp
cywgSGFzaE1hcEJ1ZmZlclR5cGU6OmNyZWF0ZSh2bSwgdGhpcywgbV9jYXBhY2l0eSkpOworICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fY2FwYWNpdHk7IGkrKykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNFbXB0
eSh0aGlzLT5idWZmZXIoKVtpXSkpOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1Y2tl
dFR5cGUqIGl0ZXIgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUq
IGVuZCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2Fw
YWNpdHkgLSAxOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fY2FwYWNpdHkgJiAobV9jYXBh
Y2l0eSAtIDEpKSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+
YnVmZmVyKCk7CisgICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgeworICAgICAgICAgICAgdWlu
dDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgaXRlci0+a2V5KCkpICYgbWFzazsKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVm
ZmVyW2luZGV4XTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkgewor
ICAgICAgICAgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAg
ICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXJbaW5kZXhdID0gaXRlcjsKKyAgICAgICAg
ICAgIGl0ZXIgPSBpdGVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHVpbnQzMl90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobV9zaXplID49IG1fZGVsZXRlQ291bnQpOworICAgICAgICByZXR1cm4gbV9zaXplIC0gbV9k
ZWxldGVDb3VudDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXIoRXhlY1N0
YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAg
bV9zaXplID0gMDsKKyAgICAgICAgbV9kZWxldGVDb3VudCA9IDA7CisgICAgICAgIEhhc2hNYXBC
dWNrZXRUeXBlKiBoZWFkID0gbV9oZWFkLmdldCgpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlw
ZSogYnVja2V0ID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiB0
YWlsID0gbV90YWlsLmdldCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICE9IHRhaWwpIHsKKyAg
ICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXh0ID0gYnVja2V0LT5uZXh0KCk7CisgICAg
ICAgICAgICAvLyBXZSByZXN0YXJ0IGVhY2ggaXRlcmF0b3IgYnkgcG9pbnRpbmcgaXQgdG8gdGhl
IGhlYWQgb2YgdGhlIGxpc3QuCisgICAgICAgICAgICBidWNrZXQtPnNldE5leHQodm0sIGhlYWQp
OworICAgICAgICAgICAgYnVja2V0ID0gbmV4dDsKKyAgICAgICAgfQorICAgICAgICBtX2hlYWQt
PnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwg
bV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9jYXBhY2l0eSA9IDQ7CisgICAgICAgIG1fYnVmZmVy
LnNldCh2bSwgdGhpcywgSGFzaE1hcEJ1ZmZlclR5cGU6OmNyZWF0ZSh2bSwgdGhpcywgbV9jYXBh
Y2l0eSkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IGJ1ZmZlclNpemVJbkJ5
dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NhcGFjaXR5ICogc2l6ZW9mKEhh
c2hNYXBCdWNrZXRUeXBlKik7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZkJ1ZmZlcigpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXRUeXBlPiwgbV9idWZmZXIpOworICAgIH0KKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZDYXBhY2l0eSgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPiwgbV9jYXBhY2l0eSk7Cisg
ICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQoKSB7IHJldHVybiBtX2hlYWQuZ2V0
KCk7IH0KKyAgICBIYXNoTWFwQnVja2V0VHlwZSogdGFpbCgpIHsgcmV0dXJuIG1fdGFpbC5nZXQo
KTsgfQorCitwcml2YXRlOgorICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV9o
ZWFkOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV90YWlsOworICAgIENv
cHlCYXJyaWVyPEhhc2hNYXBCdWZmZXJUeXBlPiBtX2J1ZmZlcjsKKyAgICB1aW50MzJfdCBtX3Np
emU7CisgICAgdWludDMyX3QgbV9kZWxldGVDb3VudDsKKyAgICB1aW50MzJfdCBtX2NhcGFjaXR5
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRyaW5zaWMuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkg
QEAgZW51bSBKU19FWFBPUlRfUFJJVkFURSBJbnRyaW5zaWMgewogICAgIElzUmVnRXhwT2JqZWN0
SW50cmluc2ljLAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRUaGlz
Tm9BcmdzRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAgIEpTTWFwR2V0SW50cmluc2ljLAorICAg
IEpTTWFwSGFzSW50cmluc2ljLAorICAgIEpTU2V0SGFzSW50cmluc2ljLAogCiAgICAgLy8gR2V0
dGVyIGludHJpbnNpY3MuCiAgICAgVHlwZWRBcnJheUxlbmd0aEludHJpbnNpYywKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3Qg
SlNDZWxsKiBhLCAKIAogYm9vbCBpc1RoaXNWYWx1ZUFsdGVyZWQoY29uc3QgUHV0UHJvcGVydHlT
bG90JiwgSlNPYmplY3QqIGJhc2VPYmplY3QpOwogCisvLyBTZWUgc2VjdGlvbiA3LjIuOTogaHR0
cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlCitib29sIHNhbWVWYWx1
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYik7CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCiAjZW5kaWYgLy8gSlNDSlNWYWx1ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTEzNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNTIsNiArMTA1MiwyMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUaGlz
VmFsdWVBbHRlcmVkKGNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFNlZSBzZWN0aW9uIDcu
Mi45OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWUKK0FMV0FZ
U19JTkxJTkUgYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFs
dWUgYikKK3sKKyAgICBpZiAoIWEuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OnN0cmljdEVxdWFsKGV4ZWMsIGEsIGIpOworICAgIGlmICghYi5pc051bWJlcigpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgZG91YmxlIHggPSBhLmFzTnVtYmVyKCk7CisgICAgZG91Ymxl
IHkgPSBiLmFzTnVtYmVyKCk7CisgICAgYm9vbCB4SXNOYU4gPSBzdGQ6OmlzbmFuKHgpOworICAg
IGJvb2wgeUlzTmFOID0gc3RkOjppc25hbih5KTsKKyAgICBpZiAoeElzTmFOIHx8IHlJc05hTikK
KyAgICAgICAgcmV0dXJuIHhJc05hTiAmJiB5SXNOYU47CisgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4oeCkgPT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih5KTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1ZhbHVlSW5saW5lc19oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lv
biAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyNSw3ICs3MjUsNiBAQCBwdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc1NldFByaXZhdGVOYW1lKCksIEpTRnVuY3Rp
b246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5jSXNTZXQpLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5m
byh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5TZXRJdGVyYXRvclByaXZhdGVOYW1l
KCksIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgU3RyaW5nKCksIHByaXZhdGVGdW5j
U2V0SXRlcmF0b3IpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAg
IEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zZXRJ
dGVyYXRvck5leHRQcml2YXRlTmFtZSgpLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDAs
IFN0cmluZygpLCBwcml2YXRlRnVuY1NldEl0ZXJhdG9yTmV4dCksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKLSAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzTWFwUHJpdmF0ZU5hbWUoKSwgSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCB0aGlzLCAxLCBTdHJpbmcoKSwgcHJpdmF0ZUZ1bmNJc01hcCksIERvbnRFbnVtIHwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmlzQXJyYXlQcml2YXRlTmFtZSgpLCBhcnJheUNv
bnN0cnVjdG9yLT5nZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmlzQXJyYXkpLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5m
byh2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5pc0FycmF5Q29uc3RydWN0b3JQcml2
YXRlTmFtZSgpLCBwcml2YXRlRnVuY0lzQXJyYXlDb25zdHJ1Y3RvciwgRG9udEVudW0gfCBEb250
RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuY29uY2F0TWVtY3B5UHJpdmF0ZU5hbWUoKSwgcHJpdmF0
ZUZ1bmNDb25jYXRNZW1jcHksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHJldmlzaW9uIDIwNTEz
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTAgKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
SlNNYXAuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUgIkNvbW1vbklk
ZW50aWZpZXJzLmgiCiAjaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
SWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
TWFwRGF0YUlubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIK
IApAQCAtMzcsMTYgKzQyLDE3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8g
SlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQordm9p
ZCBKU01hcDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCopCiB7Ci0gICAg
SlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0
LT5KU01hcDo6fkpTTWFwKCk7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1f
bWFwLnNldCh2bSwgdGhpcywgSGFzaE1hcEltcGw6OmNyZWF0ZSh2bSkpOwogfQogCiBzaXplX3Qg
SlNNYXA6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQogewotICAgIEpTTWFwKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgc2l6ZV90IG1hcERhdGFTaXplID0gdGhp
c09iamVjdC0+bV9tYXBEYXRhLmNhcGFjaXR5SW5CeXRlcygpOworICAgIC8vSlNNYXAqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKKyAgICAvL3NpemVfdCBtYXBEYXRhU2l6ZSA9
IHRoaXNPYmplY3QtPm1fbWFwRGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKKyAgICBzaXplX3QgbWFw
RGF0YVNpemUgPSAwOyAvLyBGSVhNRToKICAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShj
ZWxsKSArIG1hcERhdGFTaXplOwogfQogCkBAIC01OCwxMyArNjQsMTYgQEAgU3RyaW5nIEpTTWFw
Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplYwogdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0
YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworICAgIC8vanNDYXN0PEpTTWFwKj4oY2Vs
bCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOworCisgICAgSlNNYXAq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9tYXApOwogfQogCi12b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKKy8qCitz
aXplX3QgSlNNYXA6OnNpemUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEJhc2U6OmNvcHlCYWNr
aW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwotICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwp
LT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7CisgICAgcmV0dXJu
IG1fbWFwRGF0YS5zaXplKGV4ZWMpOwogfQogCiBib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSkKQEAgLTcyLDIyICs4MSwxNCBAQCBib29sIEpTTWFwOjpoYXMoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlCiAgICAgcmV0dXJuIG1fbWFwRGF0YS5jb250YWlucyhleGVj
LCBrZXkpOwogfQogCi1zaXplX3QgSlNNYXA6OnNpemUoRXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBtX21hcERhdGEuc2l6ZShleGVjKTsKLX0KLQogSlNWYWx1ZSBKU01hcDo6Z2V0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiB7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBtX21h
cERhdGEuZ2V0KGV4ZWMsIGtleSk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fbWFwLmdldChl
eGVjLCBrZXkpOwogfQogCiB2b2lkIEpTTWFwOjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKIHsKLSAgICBtX21hcERhdGEuc2V0KGV4ZWMsIHRoaXMsIGtl
eSwgdmFsdWUpOworICAgIG1fbWFwLnNldChleGVjLCB0aGlzLCBrZXksIHZhbHVlKTsKIH0KIAog
dm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKQEAgLTk5LDUgKzEwMCw2IEBAIGJvb2wgSlNN
YXA6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmEKIHsKICAgICByZXR1cm4gbV9tYXBEYXRh
LnJlbW92ZShleGVjLCBrZXkpOwogfQorKi8KIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcC5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMDggKzI2LDk1IEBACiAj
aWZuZGVmIEpTTWFwX2gKICNkZWZpbmUgSlNNYXBfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGli
bGVPYmplY3QuaCIKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0
LmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNN
YXBJdGVyYXRvcjsKIAotY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qg
eworY2xhc3MgSlNNYXAgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+PiBIYXNo
TWFwSW1wbDsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7
CisgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CisgICAgdHlwZWRlZiBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+IEJ1Y2tldFR5cGU7CiAKICAgICBmcmll
bmQgY2xhc3MgSlNNYXBJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBl
eHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAotICAgIC8v
IGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OwotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgY29u
c3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZt
X2tleSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFs
dWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpT
VmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiB2bSwg
Y29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV92YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2
b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAgICAg
ICAgICAgIG1fdmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0eXBlZGVm
IE1hcERhdGFJbXBsPEVudHJ5LCBKU01hcEl0ZXJhdG9yPiBNYXBEYXRhOwogCiAgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAg
ICB9CiAKICAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQogICAgIHsKICAgICAgICAgSlNNYXAqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxv
Y2F0ZUNlbGw8SlNNYXA+KHZtLmhlYXApKSBKU01hcCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKHZtLCBzdHJ1Y3R1cmUtPmdsb2JhbE9iamVjdCgpKTsKICAgICAgICAgcmV0dXJuIGlu
c3RhbmNlOwogICAgIH0KIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworCiAgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHJldHVy
biBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBib29sIGhhcyhF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBK
U1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIHNldChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgdm9p
ZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVl
KTsKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopCisgICAgeworICAg
ICAgICByZXR1cm4gbV9tYXAtPnNpemUoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUgZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9tYXAtPmdldChleGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX21hcC0+aGFzKGV4ZWMsIGtleSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbV9tYXAtPmFkZChleGVjLCBrZXksIHZhbHVlKTsKKyAgICB9CisgICAgdm9p
ZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBtX21hcC0+Y2xlYXIoZXhl
Yyk7CisgICAgfQorICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnJlbW92ZShleGVjLCBrZXkpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+ZmluZEJ1Y2tl
dChleGVjLCBrZXkpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZIYXNo
TWFwSW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTTWFwLCBt
X21hcCk7CisgICAgfQorCisgICAgSGFzaE1hcEltcGwqIGltcGwoKSB7IHJldHVybiBtX21hcC5n
ZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fbWFwRGF0YSh2
bSwgdGhpcykKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKICAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7CiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2
b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwog
ICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRl
Kik7CiAKLSAgICBNYXBEYXRhIG1fbWFwRGF0YTsKK3ByaXZhdGU6CisgICAgV3JpdGVCYXJyaWVy
PEhhc2hNYXBJbXBsPiBtX21hcDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpT
TWFwSXRlcmF0b3IuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUgIkNv
bW1vbklkZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNs
dWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNp
bmNsdWRlICJKU01hcC5oIgpAQCAtNDEsNiArNDQsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZp
bmlzaENyZWF0aW9uKFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IG1fbWFwLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0ZXJhdG9yKHZt
LCBtX21hcC0+aW1wbCgpLT5oZWFkKCkpOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTQ5LDYgKzUz
LDcgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNp
dENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21hcCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7
CiB9CiAKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCkBAIC02Miw4ICs2Nyw5IEBAIEpTVmFs
dWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNNYXBJdGVyYXRvciogSlNN
YXBJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBK
U01hcEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwgbV9raW5kKTsKLSAg
ICBjbG9uZS0+bV9pdGVyYXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBhdXRvIGNsb25lID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgp
LCBtX2tpbmQpOworICAgIGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAg
ICByZXR1cm4gY2xvbmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTTWFwSXRlcmF0b3IgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5VmFsdWU+IEhhc2hNYXBCdWNrZXQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CiAKQEAgLTUxLDUyICs1Miw2MiBAQCBwdWJsaWM6CiAgICAgICAg
IHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCog
YWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAgICAgICAgV1RGOjpLZXlWYWx1
ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLm5l
eHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIHByZXYgPSBtX2l0ZXIuZ2V0KCk7Cisg
ICAgICAgIGlmICghcHJldikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBI
YXNoTWFwQnVja2V0KiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGJ1
Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsK
KyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAg
IGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxs
cHRyKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHNl
dEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBs
YXN0IHZhbHVlLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKyAgICBib29sIG5leHQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBC
dWNrZXQqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAobV9raW5kID09IEl0ZXJh
dGVWYWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgIHZh
bHVlID0gYnVja2V0LT52YWx1ZSgpOwogICAgICAgICBlbHNlIGlmIChtX2tpbmQgPT0gSXRlcmF0
ZUtleSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci5rZXk7CisgICAgICAgICAgICB2YWx1ZSA9
IGJ1Y2tldC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gY3JlYXRl
UGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICAgICAgICAgIHZhbHVl
ID0gY3JlYXRlUGFpcihleGVjLCBidWNrZXQtPmtleSgpLCBidWNrZXQtPnZhbHVlKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIG5leHRLZXlWYWx1ZShKU1ZhbHVl
JiBrZXksIEpTVmFsdWUmIHZhbHVlKQorICAgIGJvb2wgbmV4dEtleVZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFdURjo6
S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVy
YXRvci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBhZHZhbmNl
SXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAga2V5ID0gcGFpci5rZXk7Ci0gICAgICAgIHZhbHVlID0gcGFpci52YWx1
ZTsKKyAgICAgICAga2V5ID0gYnVja2V0LT5rZXkoKTsKKyAgICAgICAgdmFsdWUgPSBidWNrZXQt
PnZhbHVlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNo
KCkKLSAgICB7Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7Ci0gICAgfQotCiAgICAgSXRl
cmF0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgSlNWYWx1ZSBp
dGVyYXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZ2V0KCk7IH0KICAgICBKU01hcEl0
ZXJhdG9yKiBjbG9uZShFeGVjU3RhdGUqKTsKIAotICAgIEpTTWFwOjpNYXBEYXRhOjpJdGVyYXRv
ckRhdGEqIGl0ZXJhdG9yRGF0YSgpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faXRlcmF0b3I7
Ci0gICAgfQotCiBwcml2YXRlOgotICAgIEpTTWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNNYXAqIGl0ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisg
ICAgSlNNYXBJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCosIEl0
ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAg
ICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bV9tYXBEYXRhLmNyZWF0ZUl0ZXJhdG9yRGF0
YSh0aGlzKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7IH0KKworICAgIHZvaWQgc2V0
SXRlcmF0b3IoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCiAgICAgeworICAgICAgICBt
X2l0ZXIuc2V0KHZtLCB0aGlzLCBidWNrZXQpOwogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCopOwpAQCAtMTA0LDcgKzExNSw3IEBA
IHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsKLSAgICBKU01hcDo6TWFw
RGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBC
dWNrZXQ+IG1faXRlcjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDEwICszNywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2V0
OjpzX2luZm8gPSB7ICJTZXQiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEpTU2V0KSB9OwogCi12b2lkIEpTU2V0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3ZvaWQgSlNT
ZXQ6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPkpTU2V0Ojp+SlNTZXQoKTsKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBIYXNo
TWFwSW1wbDo6Y3JlYXRlKHZtKSk7CiB9CiAKIFN0cmluZyBKU1NldDo6dG9TdHJpbmdOYW1lKGNv
bnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKQEAgLTUwLDIzICs1MCwyMCBAQCBTdHJpbmcgSlNT
ZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjCiAKIHNpemVfdCBKU1NldDo6ZXN0aW1hdGVk
U2l6ZShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
ZXQqPihjZWxsKTsKLSAgICBzaXplX3Qgc2V0RGF0YVNpemUgPSB0aGlzT2JqZWN0LT5tX3NldERh
dGEuY2FwYWNpdHlJbkJ5dGVzKCk7CisgICAgLy9KU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1NldCo+KGNlbGwpOworICAgIC8vc2l6ZV90IHNldERhdGFTaXplID0gdGhpc09iamVjdC0+bV9z
ZXREYXRhLmNhcGFjaXR5SW5CeXRlcygpOworICAgIHNpemVfdCBzZXREYXRhU2l6ZSA9IDA7CiAg
ICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBzZXREYXRhU2l6ZTsKIH0KIAog
dm9pZCBKU1NldDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogewogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAganND
YXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3Ip
OwotfQotCi12b2lkIEpTU2V0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZp
c2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBCYXNlOjpjb3B5QmFja2lu
Z1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+
bV9zZXREYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOworICAgIEpTU2V0KiB0
aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fbWFwKTsKIH0KIAorLyoKIGJvb2wgSlNTZXQ6OmhhcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgcmV0dXJuIG1fc2V0RGF0YS5jb250YWlucyhleGVj
LCB2YWx1ZSk7CkBAIC05MSw1ICs4OCw2IEBAIGJvb2wgSlNTZXQ6OnJlbW92ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmEKIHsKICAgICByZXR1cm4gbV9zZXREYXRhLnJlbW92ZShleGVjLCB2YWx1ZSk7
CiB9CisqLwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHJl
dmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDY5ICsyNiwyNyBAQAogI2lmbmRlZiBKU1NldF9oCiAjZGVm
aW5lIEpTU2V0X2gKIAorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCiAjaW5jbHVkZSAiSlNEZXN0
cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERh
dGEuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLWNsYXNz
IEpTU2V0IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTU2V0IDogcHVi
bGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+IEhhc2hNYXBJbXBsOwogcHVibGljOgotICAgIHR5
cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxP
YmplY3QgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXk+IEJ1Y2tldFR5cGU7CiAKICAgICBmcmllbmQgY2xhc3MgSlNTZXRJdGVyYXRvcjsKIAotICAg
IC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBs
YXlvdXQsIGFuZCBoYXZlIGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93
bj4KLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+IG1fa2V5OwotCi0gICAgcHVibGljOgotICAgICAgICBjb25zdCBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2tleTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYg
dmFsdWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpT
VmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBr
ZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiwg
Y29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBjbGVhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LmNsZWFyKCk7Ci0gICAg
ICAgIH0KLSAgICB9OwotCi0gICAgdHlwZWRlZiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNTZXRJdGVy
YXRvcj4gU2V0RGF0YTsKLQogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1
cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNTZXRUeXBlLCBT
dHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCiAgICAgc3RhdGljIEpTU2V0KiBjcmVh
dGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTk3LDMyICs1NSw2MSBAQCBwdWJs
aWM6CiAgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKICAgICB9CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYpOwogCiAgICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+
dm0oKSwgc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKLSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0
ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIHNpemVfdCBz
aXplKEV4ZWNTdGF0ZSopCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnNpemUoKTsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmhhcyhleGVjLCBrZXkpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSkKKyAgICB7CisgICAgICAgIG1fbWFwLT5hZGQoZXhlYywga2V5KTsKKyAgICB9CisKKyAg
ICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIG1fbWFwLT5jbGVh
cihleGVjKTsKKyAgICB9CisKKyAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5yZW1vdmUoZXhlYywga2V5KTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmZp
bmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSGFzaE1hcEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihK
U1NldCwgbV9tYXApOworICAgIH0KKworICAgIEhhc2hNYXBJbXBsKiBpbXBsKCkgeyByZXR1cm4g
bV9tYXAuZ2V0KCk7IH0KIAogcHJpdmF0ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX3Nl
dERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3ko
SlNDZWxsKik7CiAgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBz
dGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRv
a2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4
ZWNTdGF0ZSopOwogCi0gICAgU2V0RGF0YSBtX3NldERhdGE7CisgICAgV3JpdGVCYXJyaWVyPEhh
c2hNYXBJbXBsPiBtX21hcDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNiArNDEsNyBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZN
JiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fc2V0LnNldCh2bSwg
dGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0ZXJhdG9yKHZtLCBtX3NldC0+aW1wbCgp
LT5oZWFkKCkpOwogfQogCiB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTQ5LDYgKzUwLDcgQEAgdm9pZCBKU1Nl
dEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNP
YmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NldCk7
CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7CiB9CiAKIEpTVmFsdWUg
SlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBr
ZXksIEpTVmFsdWUgdmFsdWUpCkBAIC02Miw4ICs2NCw5IEBAIEpTVmFsdWUgSlNTZXRJdGVyYXRv
cjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNTZXRJdGVyYXRvciogSlNTZXRJdGVyYXRvcjo6Y2xv
bmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBKU1NldEl0ZXJhdG9yOjpj
cmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVy
YXRvclN0cnVjdHVyZSgpLCBtX3NldC5nZXQoKSwgbV9raW5kKTsKLSAgICBjbG9uZS0+bV9pdGVy
YXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIGNs
b25lID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2Jq
ZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fc2V0LmdldCgpLCBtX2tpbmQpOworICAg
IGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAgICByZXR1cm4gY2xvbmU7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJh
dG9yLmgJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PiBIYXNo
TWFwQnVja2V0OwogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwog
CkBAIC01Miw0NiArNTMsNTkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAg
ICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlJiB2YWx1
ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIGFkdmFuY2VJdGVyKEV4ZWNTdGF0
ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFs
dWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIpKQorICAgICAgICBI
YXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgpOworICAgICAgICBpZiAoIXByZXYpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0
ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgJiYgYnVja2V0LT5kZWxl
dGVkKCkpIHsKKyAgICAgICAgICAgIHByZXYgPSBidWNrZXQ7CisgICAgICAgICAgICBidWNrZXQg
PSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJ1Y2tldCkgeworICAg
ICAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgbnVsbHB0cik7CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgp
LCBidWNrZXQpOyAvLyBXZSBrZWVwIG1faXRlciBvbiB0aGUgbGFzdCB2YWx1ZS4KKyAgICAgICAg
cmV0dXJuIGJ1Y2tldDsKKyAgICB9CisKKyAgICBib29sIG5leHQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IGFk
dmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgICAgICBpZiAobV9raW5kID09IEl0ZXJhdGVWYWx1ZSB8fCBtX2tpbmQg
PT0gSXRlcmF0ZUtleSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci5rZXk7CisgICAgICAgICAg
ICB2YWx1ZSA9IGJ1Y2tldC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVl
ID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLmtleSk7CisgICAgICAgICAg
ICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT5rZXkoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoKCkKLSAgICB7
Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7Ci0gICAgfQotCiAgICAgSXRlcmF0aW9uS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgSlNWYWx1ZSBpdGVyYXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuZ2V0KCk7IH0KICAgICBKU1NldEl0ZXJhdG9yKiBj
bG9uZShFeGVjU3RhdGUqKTsKIAotICAgIEpTU2V0OjpTZXREYXRhOjpJdGVyYXRvckRhdGEqIGl0
ZXJhdG9yRGF0YSgpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faXRlcmF0b3I7Ci0gICAgfQot
CiBwcml2YXRlOgotICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisgICAgSlNTZXRJ
dGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCosIEl0ZXJhdGlvbktp
bmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9pdGVy
YXRvcihpdGVyYXRlZE9iamVjdC0+bV9zZXREYXRhLmNyZWF0ZUl0ZXJhdG9yRGF0YSh0aGlzKSkK
ICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7CiAgICAgfQogCisgICAgdm9pZCBzZXRJdGVy
YXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIG1faXRl
ci5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7IAorICAgIH0KKwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IEpTVmFsdWUgY3JlYXRlUGFpcihDYWxsRnJhbWUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBX
cml0ZUJhcnJpZXI8SlNTZXQ+IG1fc2V0OwotICAgIEpTU2V0OjpTZXREYXRhOjpJdGVyYXRvckRh
dGEgbV9pdGVyYXRvcjsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9pdGVyOwog
ICAgIEl0ZXJhdGlvbktpbmQgbV9raW5kOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZ
X0RFU1RSVUNUSUJMRShKU1NldEl0ZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTVHlwZS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsMTAgQEAgZW51
bSBKU1R5cGUgOiB1aW50OF90IHsKICAgICBNb2R1bGVFbnZpcm9ubWVudFR5cGUsCiAgICAgUmVn
RXhwT2JqZWN0VHlwZSwKICAgICBQcm94eU9iamVjdFR5cGUsCisgICAgSlNNYXBUeXBlLAorICAg
IEpTU2V0VHlwZSwKIAotICAgIExhc3RKU0NPYmplY3RUeXBlID0gUHJveHlPYmplY3RUeXBlLAor
ICAgIExhc3RKU0NPYmplY3RUeXBlID0gSlNNYXBUeXBlLAogfTsKIAogQ09NUElMRV9BU1NFUlQo
c2l6ZW9mKEpTVHlwZSkgPT0gc2l6ZW9mKHVpbnQ4X3QpLCBzaXplb2ZfanN0eXBlX2lzX29uZV9i
eXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJv
dG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTcsNyArNTcsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJh
dG9yCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFt
ZSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRv
clJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKLSAgICBpdGVyYXRvci0+
ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3Vs
dE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxNCArNzAsMTMgQEAgdm9pZCBNYXBQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIsIG1hcFByb3RvRnVuY0NsZWFyLCBE
b250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgbWFwUHJvdG9GdW5jRGVsZXRlLCBEb250
RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKLSAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5o
YXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklO
U0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1h
cFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKKyAgICBKU0Nf
TkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxLCBKU01hcEhhc0ludHJpbnNp
Yyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGlu
TmFtZXMoKS5rZXlzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNLZXlzLCBEb250RW51bSwgMCk7
CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNWYWx1
ZXMsIERvbnRFbnVtLCAwKTsKIAotICAgIC8vIFByaXZhdGUgZ2V0IC8gc2V0IG9wZXJhdGlvbnMu
Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jR2V0LCBE
b250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1l
KCksIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKICAg
ICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5zZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNTZXQsIERvbnRF
bnVtLCAyKTsKIAogICAgIEpTRnVuY3Rpb24qIGVudHJpZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50
cmllc1B1YmxpY05hbWUoKS5zdHJpbmcoKSwgbWFwUHJvdG9GdW5jRW50cmllcyk7CkBAIC05MCwx
NiArODksMTQgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBKU01hcCogZ2V0TWFwKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIHRoaXNWYWx1ZSkKIHsKLSAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CiAgICAgICAgIHRocm93Vk1F
cnJvcihjYWxsRnJhbWUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJyb3IoY2FsbEZyYW1lLCB0aGlzVmFs
dWUpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQotICAgIEpTTWFwKiBtYXAgPSBq
c0R5bmFtaWNDYXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKLSAgICBpZiAoIW1hcCkgewotICAgICAg
ICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiTWFwIG9wZXJhdGlvbiBj
YWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICByZXR1cm4gbWFwOworICAgIGlmIChMSUtFTFkodGhpc1ZhbHVlLmFzQ2VsbCgpLT50
eXBlKCkgPT0gSlNNYXBUeXBlKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU01hcCo+KHRoaXNW
YWx1ZSk7CisgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIk1hcCBv
cGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0IikpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0NsZWFyKENh
bGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTc3LDExICsxNzQsNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU01h
cEl0ZXJhdG9yOjpjcmVhdGUoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNhbGxlZSgpLT5n
bG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09iaiwgSXRlcmF0ZUtl
eSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAo
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpKTsKLX0K
LQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01hcEl0ZXJhdG9yKEV4
ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CkBAIC0xOTQsMTMgKzE4NiwxMiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jCiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8
SlNNYXBJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKSk7CiAgICAgSlNNYXBJdGVyYXRvciog
aXRlcmF0b3IgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKTsKICAg
ICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgaWYgKGl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUoa2V5
LCB2YWx1ZSkpIHsKKyAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShleGVjLCBrZXksIHZh
bHVlKSkgewogICAgICAgICBKU0FycmF5KiByZXN1bHRBcnJheSA9IGpzQ2FzdDxKU0FycmF5Kj4o
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgMCwga2V5KTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdElu
ZGV4KGV4ZWMsIDEsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oZmFsc2UpKTsKICAgICB9Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmgJKHJldmlzaW9uIDIwNTEzNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRlKik7CiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSopOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
RGVzY3JpcHRvci5jcHAJKHJldmlzaW9uIDIwNTEzNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwy
MiArMTkxLDYgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAg
IG1fYXR0cmlidXRlcyAmPSB+UmVhZE9ubHk7CiB9CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29s
IHNhbWVWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQotewotICAg
IGlmICghYS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwo
ZXhlYywgYSwgYik7Ci0gICAgaWYgKCFiLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBkb3VibGUgeCA9IGEuYXNOdW1iZXIoKTsKLSAgICBkb3VibGUgeSA9IGIuYXNOdW1i
ZXIoKTsKLSAgICBib29sIHhJc05hTiA9IHN0ZDo6aXNuYW4oeCk7Ci0gICAgYm9vbCB5SXNOYU4g
PSBzdGQ6OmlzbmFuKHkpOwotICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQotICAgICAgICByZXR1
cm4geElzTmFOICYmIHlJc05hTjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4
KSA9PSBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHkpOwotfQotCiBib29sIFByb3BlcnR5RGVzY3Jp
cHRvcjo6ZXF1YWxUbyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKG90aGVyLm1fdmFsdWUuaXNFbXB0eSgpICE9IG1fdmFs
dWUuaXNFbXB0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkocmV2aXNpb24gMjA1MTM0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDkgKzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdldHRlclNldHRlcjsKIAot
Ly8gU2VlIEVTNS4xIDkuMTIKLWJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpT
VmFsdWUpOwotCiBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgewogcHVibGljOgogICAgIFByb3Bl
cnR5RGVzY3JpcHRvcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJ
dGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUxMzQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBTZXRJdGVyYXRvcgogCiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0
KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9i
amVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChj
YWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUxMzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgU2V0UHJvdG90eXBlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0KICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5hZGQsIHNldFByb3RvRnVuY0FkZCwgRG9udEVudW0sIDEpOwogICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMt
PmNsZWFyLCBzZXRQcm90b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdv
cmQsIHNldFByb3RvRnVuY0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVO
Q1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgc2V0UHJvdG9G
dW5jSGFzLCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgc2V0UHJvdG9GdW5jSGFz
LCBEb250RW51bSwgMSwgSlNTZXRIYXNJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJ
T05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmVu
dHJpZXNQdWJsaWNOYW1lKCksIHNldFByb3RvRnVuY0VudHJpZXMsIERvbnRFbnVtLCAwKTsKIAog
ICAgIEpTRnVuY3Rpb24qIHZhbHVlcyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCAwLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1l
KCkuc3RyaW5nKCksIHNldFByb3RvRnVuY1ZhbHVlcyk7CkBAIC0xNzcsNyArMTc3LDYgQEAgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuYwogICAgICAgICByZXN1bHRBcnJh
eS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICB9Ci0gICAgaXRlcmF0b3ItPmZpbmlz
aCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMjA1MTM0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgog
I2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCisj
aW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1
ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUgIkpTVGVtcGxhdGVSZWdp
c3RyeUtleS5oIgpAQCAtMjQ5LDYgKzI1MCwxMCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQogICAgIHdlYkFzc2VtYmx5
Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNlbmRpZgorICAgIGhhc2hNYXBCdWNr
ZXRTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGhhc2hNYXBC
dWNrZXRNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAg
aGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+OjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAKICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNl
dCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVh
dGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpLCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0
aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCShyZXZpc2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjksNiArMzI5LDEwIEBAIHB1YmxpYzoKICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1
cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1h
cEJ1Y2tldE1hcFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFwSW1wbFNl
dFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFwSW1wbE1hcFN0cnVjdHVy
ZTsKIAogICAgIFN0cm9uZzxKU0NlbGw+IGl0ZXJhdGlvblRlcm1pbmF0b3I7CiAgICAgU3Ryb25n
PEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZp
c2lvbiAyMDUxMzQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY2LDcgKzEzNjYsNyBAQCBTZXJpYWxp
emF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICBjYXNlIE1hcERh
dGFTdGFydFZpc2l0RW50cnk6IHsKICAgICAgICAgICAgICAgICBKU01hcEl0ZXJhdG9yKiBpdGVy
YXRvciA9IG1hcEl0ZXJhdG9yU3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUg
a2V5LCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUo
a2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT5uZXh0S2V5VmFs
dWUobV9leGVjLCBrZXksIHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBtYXBJdGVyYXRv
clN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
anNEeW5hbWljQ2FzdDxKU01hcCo+KG9iamVjdCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287687</attachid>
            <date>2016-09-01 15:00:12 -0700</date>
            <delta_ts>2016-09-01 16:25:28 -0700</delta_ts>
            <desc>WIPP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>135449</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRl
ci5jcHAKKyAgICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmll
ci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVk
VHlwZS5jcHAKQEAgLTc1Miw2ICs3NTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIHJ1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0ZXJhbFBh
cnNlci5jcHAKICAgICBydW50aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJhc2UuY3Bw
CiAgICAgcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9y
UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAwLDEwICsxMzAwLDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcwMEM1QTgz
NCAvKiBKSVRNYXRoSUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9D
b2RlT3JpZ2luTWFwLmNwcCAqLzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBD
VG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVCMTk5
NzFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFz
ZS5jcHAgKi87IH07CisJCTc5NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhC
RTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2
ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAq
LzsgfTsKKwkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1
MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODMzMUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEy
MjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRN
YXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1
bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzUzMywxMCArMzUzNywxNCBAQAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0
aElDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJD
QjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dElu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdp
bk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGFzaE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEw
OTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyog
SklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
TWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NzQsNiAr
NTc4Miw4IEBACiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAq
LywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywK
IAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJ
NzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJCQk3OUEw
OTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNBMzQ5RDAz
OEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdD
NjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgz
RDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKQEAgLTU5ODIsNiArNTk5Miw4IEBACiAJCQkJ
QTdFMkVBNjkwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJCQlGNjky
QTg2ODAyNTU1OTdEMDFGRjYwRjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1
OTdEMDFGRjYwRjcgLyogTG9va3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEw
IC8qIE1hcEJhc2UuY3BwICovLAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBC
YXNlLmggKi8sCiAJCQkJQTcwMDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9y
LmNwcCAqLywKIAkJCQlBNzAwODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3Iu
aCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLApAQCAt
NzI3MSw2ICs3MjgzLDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxs
RnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBD
YWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgxRDc4QkUz
NTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3MUI4NEZC
NEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTc0MzcsNiArNzQ1MCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFB
QjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5
QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFw
aC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzEsNyBAQAogCQkJCTBGMDMzMkMwMThB
REZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZB
QTAwQ0Y2NTY0IC8qIEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdE
RkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTIwMSw2ICs5MjE2LDcgQEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJGRjJCMUFE
NDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlDQzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThE
Q0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAj
aW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzQ2LDYgKzM0OCwxMiBAQCBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBpZiAoY2xhc3NJbmZvID09IFJl
Z0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1JlZ0V4cE9iamVjdDsKKwor
ICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNN
YXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0OjppbmZvKCkpCisgICAgICAg
IHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xh
c3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MSArMzksNDMgQEAgY2xhc3Mg
U3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0ZWRUeXBlOwogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAgICAgPSAwOyAvLyBXZSBkb24n
dCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmlu
YWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9i
amVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQXJyYXkgICAgICAgICAgICAg
ID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0gMXUgPDwgMjsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
SW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDhB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUgPDwgNTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdSA8PCA2OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5ICA9IDF1IDw8
IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRz
IHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5
ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Vp
bnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MzJB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdSA8PCAxMTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXVsbCA8PCAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxsIDw8IDE7IC8vIEl0J3MgZGVm
aW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bmN0
aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlv
bi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0g
MXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MTZBcnJheSAg
ICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MTZBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0lu
dDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMy
QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXVsbCA8PCA3OyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJheSAgICAgICAgPSAx
dWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRz
IHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5
ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5IG9y
IG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
RmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8PCAxMTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJh
eSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNw
ZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8
IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8PCAxMjsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBT
dHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVj
dCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBSZWdFeHBPYmplY3QgKGFu
ZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8IDE2OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJheSwgb3IgSlNGdW5j
dGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0ICAgICAgICAgICAg
ID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwgU3BlY1R5cGVk
QXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1bWVudHMgfCBT
cGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8g
Qml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlv
bi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0g
MXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVu
dGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAg
ICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5v
dCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RB
cmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1
bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1
bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVu
dHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3Qg
ICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1bGwg
PDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5vdCBhbnkgc3Vi
Y2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
TWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQncyBkZWZpbml0ZWx5IE1hcCBv
YmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwgPDwgMTc7IC8vIEl0J3MgZGVm
aW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1bGwgPDwg
MTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBK
U0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNP
YmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVu
Y3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Nj
b3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3Bl
Y01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7IC8vIEJpdG1hc2sg
dXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDF1bGwgPDwg
MTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVy
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAgICAgPSAx
dWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFu
IGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZyAgICAg
ICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdWYXI7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTeW1ib2wg
ICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3ltYm9sLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAgICAgICAgPSAxdSA8PCAy
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09i
amVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRo
aXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1bGwgPDwgMjE7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2Vs
bE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxs
IGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0
cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10
b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAg
ICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNDZWxsT3Ro
ZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxsIDw8IDIzOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwgPDwgMjQ7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAgICAgPSBTcGVjQm9vbEludDMy
IHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyLgotc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdSA8PCAyMzsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQu
IEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8PCAyNTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBk
ZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
QW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNwZWNJbnQ1Mk9ubHk7IC8vIEl0
J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50IGFyaXRobWV0aWMgb24uCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFzRG91YmxlICAgICA9IDF1IDw8
IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91Ymxl
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAx
dSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1MiBidXQgaXQncyBhIHJlYWwg
bnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
SW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3OyAvLyBJdCdzIGRlZmluaXRl
bHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5kIGl0J3MgYSBkb3VibGUu
CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVJlYWwgICAgICAgICA9IFNw
ZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJs
ZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBp
cyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgTmFO
IHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxsIDw8IDI4OyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdWxsIDw8IDI5OyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUgdG8gdGFnIChpLmUuIGltcHVy
ZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZU5hTiAgICAgICAgICA9
IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5hTjsgLy8gSXQncyBkZWZpbml0
ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5
dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZVB1cmVOYU47IC8v
IEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUsIGJ1dCBpdCdzIGRlZmluaXRl
bHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxE
b3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZU5hTjsgLy8gSXQncyBl
aXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgxLDEyICs4MywxMiBAQCBzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRG91Ymxl
UmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGVSZWFsLCBvciBhIEludDUy
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJlciAgICAgPSBT
cGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQz
MiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGltcHVyZSBOYU4uCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IFNwZWNB
bnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIsIEludDUyLCBv
ciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICA9IDF1IDw8IDI4OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhl
ciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9v
bGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQm9vbGVh
bi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0g
MXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gU3Bl
Y0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFu
LCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0hl
YXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01p
c2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9u
bHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5vbi1PYmplY3QgSlNWYWx1ZS4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXUg
PDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMzI7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IFNwZWNIZWFwVG9wIHwgU3Bl
Y0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50
NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNwb25kcyB0byB3aGF0IGNvdWxk
IGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29kZVRvcCB8IFNwZWNGdWxsTnVt
YmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29kZSBjb3VsZCBzZWUgcGx1cyBl
eG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYgKzk3NywyMCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBC
dWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJc05v
bkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNK
U0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0yODgzLDcgKzI4OTcsNiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
CiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0
dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJl
c3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzogeworICAgICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5v
ZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNoLCBrZXkpOworICAg
ICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgRWRnZShtYXAsIE1h
cE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNoKSk7CisgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgT3BJbmZvKCksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBK
U1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFwSGFzSW50cmluc2ljOiB7CisgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKworICAgICAgICBOb2RlKiBtYXBPclNl
dCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwor
ICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwg
a2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50
cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOworICAgICAgICBOb2RlKiBidWNr
ZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJbmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1
c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0g
YWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBidWNrZXQpOworICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYgKzEyNDMsMjcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblRhaWw6CiAgICAg
ICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWFwSGFz
aDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBF
ZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBu
b2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEJ1Y2tldExvYywg
TWlzY0ZpZWxkcywgbWFwRWRnZSwga2V5RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgRWRnZSYgYnVja2V0RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwR2V0TG9jLCBNaXNjRmllbGRzLCBi
dWNrZXRFZGdlKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcFNldEhhc0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+
Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgIGNhc2UgTWFwSGFz
aDoKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6
CisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29w
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlz
dDsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDc7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0KCkgeyBy
ZXR1cm4gODsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9k
ZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cywgS2lsbFN0YXR1cyBr
aWxsU3RhdHVzKQogICAgIHsKQEAgLTE5Nyw4ICsxOTcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAg
dWludHB0cl90IHNoaWZ0ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIDw8
IHNoaWZ0KCk7CiAgICAgICAgIEFTU0VSVCgoc2hpZnRlZFZhbHVlID4+IHNoaWZ0KCkpID09IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0g
MCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwotICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDIpIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1
cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0
dXMpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0
VXNlS2luZCkgPDwgMikgPCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSwg
IldlIHJlbHkgb24gdGhpcyBiZWluZyB0cnVlIHRvIG5vdCBjbG9iYmVyIHRoZSBub2RlIHBvaW50
ZXIuIik7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBzaGlmdGVkVmFsdWUgfCAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0
dXMpIDw8IDEpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihERkc6OmlzUHJvdmVkKHByb29mU3Rh
dHVzKSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICB1bmlv
biBVIHsKKyAgICAgICAgICAgICAgICBVKCkgeyB3b3JkID0gMDsgfQorICAgICAgICAgICAgICAg
IHVpbnRwdHJfdCB3b3JkOworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZTsKKyAgICAgICAgICAg
IH0gdTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVkZ2UudXNlS2luZFVuY2hlY2tlZCgpID09IHVz
ZUtpbmQpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5ub2RlKCkgPT0gbm9kZSk7CisgICAg
ICAgICAgICBBU1NFUlQodS5lZGdlLnByb29mU3RhdHVzVW5jaGVja2VkKCkgPT0gcHJvb2ZTdGF0
dXMpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5raWxsU3RhdHVzVW5jaGVja2VkKCkgPT0g
a2lsbFN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ1LDYgKzE1NDUsMjUgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBHZXRN
YXBCdWNrZXQ6CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1h
cE9iamVjdFVzZSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE1hcE9iamVjdFVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPFNldE9iamVjdFVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBmaXhFZGdlPFVudHlwZWRVc2U+
KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTG9hZEZyb21KU01h
cEJ1Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNr
ZXQ6CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAgIC8vIEhh
dmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9yZ2V0cyB0
byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50
OgpAQCAtMTYxNiw2ICsxNjM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRCeVZhbFdp
dGhUaGlzOgogICAgICAgICBjYXNlIEdldEJ5VmFsV2l0aFRoaXM6CiAgICAgICAgIGNhc2UgQ29t
cGFyZUVxUHRyOgorICAgICAgICBjYXNlIE1hcEhhc2g6CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0Myw2ICsxNDMsMTUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IExvYwogICAgIGNhc2UgUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jOgogICAgICAgICBvdXQucHJp
bnQoIlJlZ0V4cE9iamVjdExhc3RJbmRleExvYyIpOwogICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBKU01hcEJ1Y2tldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcEJ1Y2tldExvYyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01hcEdldExvYzoKKyAgICAgICAgb3V0LnByaW50
KCJKU01hcEdldExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01hcFNldEhhc0xv
YzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcFNldEhhc0xvYyIpOworICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIw
NTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBT
dHJ1Y3R1cmVMb2MsCiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2Ms
Ci0gICAgU3RhY2tQYXlsb2FkTG9jCisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAgIEpTTWFwQnVj
a2V0TG9jLAorICAgIEpTTWFwR2V0TG9jLAorICAgIEpTTWFwU2V0SGFzTG9jCiB9OwogCiBjbGFz
cyBIZWFwTG9jYXRpb24gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDE5LDYgKzE0MTksNyBAQCBwdWJsaWM6CiAgICAgICAgIGNhc2Ug
U3RyaW5nUmVwbGFjZToKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhwOgogICAgICAg
ICBjYXNlIFRvTnVtYmVyOgorICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDcgKzM4OCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRvclN0cnVjdHVy
ZVBuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0
RW51bWVyYXRvckdlbmVyaWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykg
XAotICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKKyAgICBtYWNybyhUb0lu
ZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICAvKiBIYXNoaW5nIG5vZGVzIGZvciBKU01h
cCBhbmQgSlNTZXQgKi8gXAorICAgIG1hY3JvKE1hcEhhc2gsIE5vZGVSZXN1bHRJbnQzMikgXAor
ICAgIG1hY3JvKEdldE1hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oTG9hZEZy
b21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSXNOb25FbXB0eU1hcEJ1
Y2tldCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVyYXRlcyBhIG1v
bm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAvLyBhbmQgaXMg
dXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAoYXMgYWNjZXNz
ZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
OCBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25t
ZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUg
Ik9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlNj
b3BlZEFyZ3VtZW50cy5oIgpAQCAtMTgwMyw2ICsxODA1LDM0IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXREeW5hbWljVmEKICAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNj
b3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgc2xvdCk7CiB9CiAKK2lu
dDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgaW5wdXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICByZXR1cm4ganNNYXBI
YXNoKGV4ZWMsIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVlOjpkZWNvZGUoaW5wdXQpKSk7Cit9CisK
K0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8
SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNo
KTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
ICpidWNrZXQ7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRC
dWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBp
bnQzMl90IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxs
RnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBi
dWNrZXQgPSBqc0Nhc3Q8SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRl
Y29kZShrZXkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFU
SU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhp
dEJhc2UqIGV4aXQpCiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBk
b24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTMw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDIsNiArMTQyLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RW5zdXJlQXJyYXkKIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJv
cGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAoraW50MzJf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgaW5wdXQpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tl
dChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CitKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2Vs
bCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSop
OwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzExLDYgKzcxMSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAg
ICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKKyAg
ICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgogICAgICAgICBjYXNlIFRvTnVtYmVyOiB7
CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0
aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03NDEsNiArNzQyLDE2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgTWFwSGFzaDoK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0
aW9uKFNwZWNDZWxsT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNO
b25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4p
OworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAg
ICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAg
ICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAg
ICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6Cisg
ICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6
CiAgICAgICAgIGNhc2UgU3RyaW5nSWRlbnRVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgpA
QCAtMzU1LDYgKzM1NywxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUm
IHN0CiAgICAgY2FzZSBHZXREeW5hbWljVmFyOgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAg
ICBjYXNlIFJlc29sdmVTY29wZToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBC
dWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0
eU1hcEJ1Y2tldDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBACiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJE
aXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJI
YXNoTWFwSW1wbC5oIgogI2luY2x1ZGUgIkpTRW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRl
ICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oIgpAQCAtNDcyMCw2ICs0NzIxLDgyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBNYXBIYXNo
OiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KworICAgICAgICBKU1ZhbHVlUmVncyBpbnB1dFJlZ3MgPSBpbnB1dC5qc1ZhbHVlUmVncygpOwor
CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgaW5w
dXRSZWdzKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgaW50MzJS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2Fz
ZSBHZXRNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9k
ZS0+Y2hpbGQzKCkpOworICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CisKKyAgICAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJl
Z3Mga2V5UmVncyA9IGtleS5qc1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgaGFzaEdQUiA9
IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisg
ICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7Cisg
ICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2Up
CisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hH
UFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpT
U2V0RmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAg
ICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01h
cEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKworICAgICAgICBHUFJSZWcg
YnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQ
UiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSBy
ZXN1bHRUYWcuZ3ByKCk7CisKKyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5s
b2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCBKU1ZhbHVlUmVn
cyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpKTsKKyAgICAgICAgYXV0byBkb25lID0g
bV9qaXQuanVtcCgpOworCisgICAgICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRh
Z0dQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2Fk
R1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tl
dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICBtX2ppdC5jb21wYXJlUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BS
LCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVz
dWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBGbHVzaDoK
ICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzksNyArMzksOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Vu
dmlyb25tZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNp
bmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgor
I2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVk
ZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIK
QEAgLTQ2MTUsNiArNDYxNywxNjkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIE1hcEhhc2g6IHsKKyAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzdHJhaWdo
dEhhc2g7CisgICAgICAgIGF1dG8gaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGlu
cHV0R1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAg
ICAgICBzdHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU1N0cmluZzo6b2Zm
c2V0T2ZWYWx1ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOworICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJpbmdJ
bXBsOjpmbGFnc09mZnNldCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQudXJzaGlmdDY0
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoNiksIHJlc3VsdEdQUik7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJl
c3VsdEdQUikpOworICAgICAgICBhdXRvIGRvbmUyID0gbV9qaXQuanVtcCgpOworCisgICAgICAg
IGlzTm90Q2VsbC5saW5rKCZtX2ppdCk7CisgICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9q
aXQuYnJhbmNoSWZOb3ROdW1iZXIoaW5wdXRHUFIpKTsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFw
cGVuZChtX2ppdC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzKGlucHV0R1BSKSkpOworICAgICAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBzdHJhaWdodEhhc2gu
bGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC5qc01hcEhhc2gocmVzdWx0R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgYXV0
byBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsK
KyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIGlucHV0R1BSKTsKKyAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5leGNl
cHRpb25DaGVjaygpOworCisgICAgICAgIGRvbmUyLmxpbmsoJm1faml0KTsKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBrZXkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxh
dGVJbnQzMk9wZXJhbmQgaGFzaCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSBtYXNrKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgaW5kZXgodGhpcyk7Cisg
ICAgICAgIEdQUlRlbXBvcmFyeSBidWZmZXIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBi
dWNrZXQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgR1BSUmVnIGhhc2hHUFIgPSBoYXNoLmdwcigpOworICAgICAgICBHUFJSZWcgbWFwR1BSID0g
bWFwLmdwcigpOworICAgICAgICBHUFJSZWcgbWFza0dQUiA9IG1hc2suZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgYnVmZmVyR1BS
ID0gYnVmZmVyLmdwcigpOworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0Lmdwcigp
OworICAgICAgICBHUFJSZWcga2V5R1BSID0ga2V5LmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KG5v
ZGUtPmNoaWxkMSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gU2V0T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0
KG5vZGUtPmNoaWxkMSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobWFwR1BSLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFw
T2JqZWN0VXNlID8gSlNNYXA6Om9mZnNldE9mSGFzaE1hcEltcGwoKSA6IEpTU2V0OjpvZmZzZXRP
Zkhhc2hNYXBJbXBsKCkpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQ2FwYWNpdHkoKSksIG1hc2tHUFIpOworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkJ1
ZmZlcigpKSwgYnVmZmVyR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEp
LCBtYXNrR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShoYXNoR1BSLCBpbmRleEdQUik7CisKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXBMaXN0IHNsb3dQYXRoQ2FzZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBsb29wQXJvdW5kOworCisgICAgICAgIG1faml0LmFuZDMyKG1hc2tHUFIsIGluZGV4R1BSKTsK
KyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJ1ZmZlckdQ
UiwgaW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgYnVja2V0R1BSKTsKKyAg
ICAgICAgbV9qaXQubW92ZShidWNrZXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gbm90
UHJlc2VudEluVGFibGUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
KyAgICAgICAgICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmVtcHR5VmFsdWUoKSkpOworICAgICAgICBs
b29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAK
KyAgICAgICAgICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmRlbGV0ZWRWYWx1ZSgpKSkpOworCisgICAg
ICAgIG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpvZmZzZXRPZktleSgpKSwgYnVja2V0R1BS
KTsKKworICAgICAgICAvLyBQZXJmb3JtIE9iamVjdC5pcygpCisgICAgICAgIGRvbmUuYXBwZW5k
KG1faml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIp
KTsgLy8gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVj
a2V0IHdlIHdlcmUgbG9va2luZyBmb3IhCisgICAgICAgIGF1dG8gb25lSXNudENlbGwgPSBtX2pp
dC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoYnVja2V0R1BSKSk7CisgICAgICAgIC8vIGZp
cnN0IGlzIGEgY2VsbCBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFu
Y2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3Moa2V5R1BSKSkpOworICAgICAgICAvLyBCb3RoIGFyZSBj
ZWxscyBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJ1Y2tl
dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdU
eXBlKSkpOworICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KKyAgICAgICAg
c2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6RXF1YWwsCisg
ICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhrZXlHUFIsIEpTQ2VsbDo6dHlwZUluZm9U
eXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhl
IGZpcnN0IGlzIGEgc3RyaW5nLCBidXQgdGhlIHNlY29uZCBpcyBub3QsIHdlIGNvbnRpbnVlIHRv
IGxvb3AgYXJvdW5kLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOwor
CisgICAgICAgIG9uZUlzbnRDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgLy8gV2UndmUgYWxy
ZWFkeSBkb25lIGEgNjQtYml0IGNvbXBhcmUgYXQgdGhpcyBwb2ludCwgc28gaWYgb25lIGlzIG5v
dCBhIG51bWJlciwgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBlcXVhbC4KKyAgICAgICAgbG9vcEFy
b3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoYnVja2V0R1BSKSk7CisgICAgICAg
IGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGtleUdQUikpOworICAg
ICAgICAvLyBCb3RoIGFyZSBkZWZpbml0ZWx5IG51bWJlcnMuIElmIHdlIHNlZSBhIGRvdWJsZSwg
d2UgZ28gdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoSWZOb3RJbnQzMihidWNrZXRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5h
cHBlbmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihrZXlHUFIpKTsKKyAgICAgICAgCisgICAgICAg
IGxvb3BBcm91bmQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1t
MzIoMSksIGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmbV9q
aXQpOworCisgICAgICAgIHNsb3dQYXRoQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIC8vIEZJWE1FOiB3ZSd2ZSBh
bHJlYWR5IGhhc2hlZCwgbGV0cyBqdXN0IHBhc3MgaW4gYWxsIHRoZSBzdGF0ZSB0byB0aGUgZmlu
ZEJ1Y2tldCBmdW5jdGlvbi4KKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFw
RmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0
LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7
CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90UHJlc2Vu
dEluVGFibGUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1QdHIo
bnVsbHB0ciksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgYXV0
byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBi
dWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZz
ZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CisKKyAgICAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5l
ZCgpKSksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbV9q
aXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1Y2tldEdQUiwgVHJ1c3Rl
ZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihW
YWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIs
IG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisKICAg
ICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVzZSwg
dmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzgxLDYgKzczODEs
MzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlUmVnRXhwT2JqZQogICAgIHNwZWN1
bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSwgR1BSUmVnIGNlbGwpCit7Cisg
ICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3BlY01hcE9iamVjdCwgSlNNYXBUeXBl
KTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRn
ZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNYXBPYmplY3QpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVk
Z2UpOworICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKK30KKwor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSwgR1BSUmVn
IGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3BlY1NldE9iamVj
dCwgSlNTZXRUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2Jq
ZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNTZXRP
YmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVy
YW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBvcGVyYW5kLmdw
cigpKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0T3JPdGhlcihF
ZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0IHwg
U3BlY090aGVyKSkKQEAgLTc2NjgsNiArNzY5NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CiAgICAgICAgIHNw
ZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNYXBP
YmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChl
ZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAg
ICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOwogICAgICAgICBicmVhazsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtOTMsMTQgKzkzLDE0IEBAIHByaXZhdGU6CiAgICAgLy8gdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvci4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIGVudW0gU3BpbGxP
cmRlciB7Ci0gICAgICAgIFNwaWxsT3JkZXJDb25zdGFudCA9IDEsIC8vIG5vIHNwaWxsLCBhbmQg
Y2hlYXAgZmlsbAotICAgICAgICBTcGlsbE9yZGVyU3BpbGxlZCAgPSAyLCAvLyBubyBzcGlsbAot
ICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAotICAgICAgICBT
cGlsbE9yZGVyQ2VsbCAgICAgPSA0LCAvLyBuZWVkcyBzcGlsbAotICAgICAgICBTcGlsbE9yZGVy
U3RvcmFnZSAgPSA0LCAvLyBuZWVkcyBzcGlsbAotICAgICAgICBTcGlsbE9yZGVySW50ZWdlciAg
PSA1LCAvLyBuZWVkcyBzcGlsbCBhbmQgYm94Ci0gICAgICAgIFNwaWxsT3JkZXJCb29sZWFuICA9
IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gKLSAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgID0g
NiwgLy8gbmVlZHMgc3BpbGwgYW5kIGNvbnZlcnQKKyAgICAgICAgU3BpbGxPcmRlckNvbnN0YW50
ICA9IDEsIC8vIG5vIHNwaWxsLCBhbmQgY2hlYXAgZmlsbAorICAgICAgICBTcGlsbE9yZGVyU3Bp
bGxlZCAgID0gMiwgLy8gbm8gc3BpbGwKKyAgICAgICAgU3BpbGxPcmRlckpTICAgICAgICA9IDQs
IC8vIG5lZWRzIHNwaWxsCisgICAgICAgIFNwaWxsT3JkZXJDZWxsICAgICAgPSA0LCAvLyBuZWVk
cyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVyU3RvcmFnZSAgID0gNCwgLy8gbmVlZHMgc3BpbGwK
KyAgICAgICAgU3BpbGxPcmRlckludGVnZXIgICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gK
KyAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4gICA9IDUsIC8vIG5lZWRzIHNwaWxsIGFuZCBib3gK
KyAgICAgICAgU3BpbGxPcmRlckRvdWJsZSAgICA9IDYsIC8vIG5lZWRzIHNwaWxsIGFuZCBjb252
ZXJ0CiAgICAgfTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgZW51bSBTcGlsbE9yZGVy
IHsKQEAgLTUxOSw3ICs1MTksNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHNw
ZWNpYWwsIHNpbmNlIGl0J3Mgbm90IGEgSlMgdmFsdWUgLSBhcyBpbiBpdCdzIG5vdCB2aXNpYmxl
IHRvIEpTCiAgICAgICAgICAgICAvLyBjb2RlLgogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
aW5mby5ncHIoKSwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3BpbGxNZSkpOwotICAgICAgICAg
ICAgaW5mby5zcGlsbCgqbV9zdHJlYW0sIHNwaWxsTWUsIERhdGFGb3JtYXRTdG9yYWdlKTsKKyAg
ICAgICAgICAgIGluZm8uc3BpbGwoKm1fc3RyZWFtLCBzcGlsbE1lLCBzcGlsbEZvcm1hdCk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMTI5MSw2ICsxMjkxLDEyIEBAIHB1
YmxpYzoKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxs
T3BlcmF0aW9uKENfSklUT3BlcmF0aW9uX0VDSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9q
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQor
CiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpN
aWMgb3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFs
dWVSZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIuZ3ByKCksIG1hdGhJ
Qyk7CkBAIC0xNjcxLDYgKzE2NzcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5k
Q2FsbChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcg
YXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShh
cmcxKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRP
cGVyYXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNp
Z25lZCBhcmcyLCB1bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMy
KGFyZzMpKTsKQEAgLTE3MTksNiArMTczMSwxOCBAQCBwdWJsaWM6CiAgICAgfQogI2Vsc2UgLy8g
VVNFKEpTVkFMVUUzMl82NCkKIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Q19KSVRPcGVyYXRpb25fRUNKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
LCBKU1ZhbHVlUmVncyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50
YWdHUFIoKSwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJl
Z3MgYXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSk7
CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsK
KyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0
aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJn
MSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcg
YXJnMS5wYXlsb2FkR1BSKCksIGFyZzEudGFnR1BSKCksIGFyZzIucGF5bG9hZEdQUigpLCBhcmcy
LnRhZ0dQUigpLCBtYXRoSUMpOwpAQCAtMjY1Niw2ICsyNjgwLDEwIEBAIHB1YmxpYzoKICAgICB2
b2lkIHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhw
T2JqZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVj
dChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNw
ZWN1bGF0ZU1hcE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CisgICAgdm9pZCBzcGVjdWxhdGVT
ZXRPYmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSwgR1BSUmVn
IGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKICAgICB2b2lk
IHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1
bGF0ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2UoRWRnZSBlZGdlLCBHUFJSZWcgc3RyaW5nLCBH
UFJSZWcgc3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtp
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2lu
ZC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VXNlS2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDEyIEBAIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToK
ICAgICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk1hcE9iamVjdFVzZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIG91dC5wcmlu
dCgiU2V0T2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdE9yT3Ro
ZXJVc2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24g
MjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYzLDYgKzYzLDggQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93blN0cmlu
Z1VzZSwKICAgICBLbm93blByaW1pdGl2ZVVzZSwgLy8gVGhpcyBiaXphcnJlIHR5cGUgYXJpc2Vz
IGZvciBvcF9zdHJjYXQsIHdoaWNoIGhhcyBhIGJ5dGVjb2RlIGd1YXJhbnRlZSB0aGF0IGl0IHdp
bGwgb25seSBzZWUgcHJpbWl0aXZlcyAoaS5lLiBub3Qgb2JqZWN0cykuCiAgICAgU3ltYm9sVXNl
LAorICAgIE1hcE9iamVjdFVzZSwKKyAgICBTZXRPYmplY3RVc2UsCiAgICAgU3RyaW5nT2JqZWN0
VXNlLAogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5vdFN0cmluZ1ZhclVzZSwK
QEAgLTEzNCw2ICsxMzYsMTAgQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3Io
VXNlSwogICAgICAgICByZXR1cm4gU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdDsKICAgICBjYXNl
IFN5bWJvbFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNTeW1ib2w7CisgICAgY2FzZSBNYXBPYmpl
Y3RVc2U6CisgICAgICAgIHJldHVybiBTcGVjTWFwT2JqZWN0OworICAgIGNhc2UgU2V0T2JqZWN0
VXNlOgorICAgICAgICByZXR1cm4gU3BlY1NldE9iamVjdDsKICAgICBjYXNlIFN0cmluZ09iamVj
dFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdP
clN0cmluZ09iamVjdFVzZToKQEAgLTIyMSw2ICsyMjcsOCBAQCBpbmxpbmUgYm9vbCBpc0NlbGwo
VXNlS2luZCBraW5kKQogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgIGNhc2UgU3RyaW5nT2JqZWN0
VXNlOgogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgY2FzZSBNYXBPYmpl
Y3RVc2U6CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lv
biAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRG
R0FycmF5TW9kZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIklu
ZGV4aW5nVHlwZS5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC0xMDIsNyArMTA0LDEzIEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJ
bmZvLCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJl
X2dsb2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1h
Y3JvKFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwK
LSAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURP
ZmZzZXQoKSkKKyAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3Ry
dWN0dXJlSURPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTTWFwX2hhc2hNYXBJbXBsLCBKU01hcDo6
b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpKSBcCisgICAgbWFjcm8oSlNTZXRfaGFzaE1hcEltcGwsIEpT
U2V0OjpvZmZzZXRPZkhhc2hNYXBJbXBsKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9jYXBh
Y2l0eSwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpv
ZmZzZXRPZkNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9idWZmZXIsICBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVm
ZmVyKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpIFwKKyAgICBtYWNybyhI
YXNoTWFwQnVja2V0X2tleSwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pjo6b2Zmc2V0T2ZLZXkoKSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1Rf
SEVBUChtYWNybykgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RB
cmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2
aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEwIEBAIGlubGluZSBDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6
CiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIE1h
cEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVj
a2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAg
ICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTQzNyw2ICs0NDEs
OCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAg
ICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdP
clN0cmluZ09iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAg
ICAgICAgICAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIFNldE9i
amVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTm90Q2Vs
bFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9C
My5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1
ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2lu
Y2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDE4IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJh
eSgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAg
ICAgIGNvbXBpbGVNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBH
ZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0TWFwQnVja2V0KCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAg
ICAgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlSXNOb25F
bXB0eU1hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmpl
Y3Q6CiAgICAgICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtNjM1MSw2ICs2MzY0LDIyOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0
LnBoaShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZv
aWQgY29tcGlsZU1hcEhhc2goKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNl
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbCA9IG1fb3V0
Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRIYXNoID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgbm9uRW1wdHlTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKwor
ICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5
cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShub3RDZWxs
KSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0Nl
bGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5l
cXVhbChtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9U
eXBlKSwgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0
cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbm9u
RW1wdHlTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2Fk
UHRyKHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNo
KAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIo
MCkpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5U3RyaW5nQ2FzZSkpOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkVtcHR5U3RyaW5nQ2FzZSwgbm90Q2VsbCk7CisgICAg
ICAgIExWYWx1ZSBoYXNoID0gbV9vdXQubFNocihtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9o
ZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksIG1fb3V0LmNvbnN0SW50MzIoNikpOworICAg
ICAgICBWYWx1ZUZyb21CbG9jayBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQgPSBtX291dC5hbmNo
b3IoaGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoLCBtX291dC5j
b25zdEludDMyKDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29u
dGludWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwgaXNOdW1iZXJD
YXNlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUp
LCB1bnN1cmUoaXNOdW1iZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKAorICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShzdHJhaWdodEhh
c2gpLCB1bnN1cmUoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJhaWdo
dEhhc2gsIHNsb3dDYXNlKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAg
ICAgTFZhbHVlIGtleSA9IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtleTsKKyAgICAg
ICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7CisgICAgICAg
IHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXks
IHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAgIHRlbXAgPSBr
ZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjIp
KTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtl
eSArPSB+KGtleSA8PCAxMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBt
X291dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0ZW1wID0gbV9v
dXQuYml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAg
ICAgICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAg
IHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOworICAgICAgICBr
ZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IChrZXkgPDwg
Myk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwg
bV9vdXQuY29uc3RJbnQzMigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXAp
OworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAgPSBrZXk7Cisg
ICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTUpKTsKKyAg
ICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+
KGtleSA8PCAyNyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5z
aGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0
Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAg
Ly8ga2V5IF49IChrZXkgPj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1w
ID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAgICAgIGtleSA9
IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5jYXN0VG9JbnQz
MihrZXkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNo
b3Ioa2V5KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsKEludDMy
LCBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkp
OworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBo
aShJbnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0
KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0TWFwQnVja2V0KCkKKyAgICB7CisgICAg
ICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBub3RQcmVzZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIG5vdEVtcHR5VmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBub3REZWxldGVkVmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGJ1Y2tldEtleU5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBib3RoQXJlQ2VsbHMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBidWNrZXRLZXlJc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGJ1Y2tldEtleUlzTnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgYm90aEFyZU51bWJlcnMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBidWNrZXRLZXlJc0ludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUg
bWFwOworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0
VXNlKQorICAgICAgICAgICAgbWFwID0gbG93TWFwT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBlbHNlIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RV
c2UpCisgICAgICAgICAgICBtYXAgPSBsb3dTZXRPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisK
KyAgICAgICAgTFZhbHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAg
ICAgIExWYWx1ZSBoYXNoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAg
TFZhbHVlIGhhc2hNYXBJbXBsID0gbV9vdXQubG9hZFB0cihtYXAsIG1fbm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IE1hcE9iamVjdFVzZSA/IG1faGVhcHMuSlNNYXBfaGFzaE1hcEltcGwgOiBt
X2hlYXBzLkpTU2V0X2hhc2hNYXBJbXBsKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0
LmxvYWRQdHIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfYnVmZmVyKTsKKyAgICAg
ICAgTFZhbHVlIG1hc2sgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKGhhc2hNYXBJbXBsLCBtX2hl
YXBzLkhhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaGFzaCk7CisgICAgICAgIG1f
b3V0Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB1
bm1hc2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAgICAgICAgTFZh
bHVlIGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOworICAgICAgICBM
VmFsdWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFw
cy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9vdXQuemVyb0V4dChpbmRleCwg
SW50NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3Vs
dCA9IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1f
b3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSksCisgICAg
ICAgICAgICB1bnN1cmUobm90UHJlc2VudEluVGFibGUpLCB1bnN1cmUobm90RW1wdHlWYWx1ZSkp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5vdERlbGV0ZWRWYWx1
ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291
dC5jb25zdEludFB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5Pj46OmRlbGV0ZWRWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCks
IHVuc3VyZShub3REZWxldGVkVmFsdWUpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RE
ZWxldGVkVmFsdWUsIG5vdEJpdEVxdWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1Y2tldEtleSA9IG1f
b3V0LmxvYWQ2NChoYXNoTWFwQnVja2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNrZXRfa2V5KTsKKyAg
ICAgICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQorICAgICAgICBtX291dC5icmFuY2gobV9vdXQu
ZXF1YWwoa2V5LCBidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShub3RCaXRFcXVhbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVx
dWFsLCBidWNrZXRLZXlJc0NlbGwpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tl
dEtleSksCisgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwgdW5zdXJlKGJ1Y2tl
dEtleU5vdENlbGwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGws
IGJvdGhBcmVDZWxscyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoa2V5KSwKKyAgICAg
ICAgICAgIHVuc3VyZShib3RoQXJlQ2VsbHMpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOworICAg
ICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3Vy
ZShidWNrZXRLZXlJc1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENlbGwpOworICAgICAg
ICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0
aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0
S2V5Tm90Q2VsbCwgYnVja2V0S2V5SXNOdW1iZXIpOworICAgICAgICBtX291dC5icmFuY2goaXNO
b3ROdW1iZXIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5z
dXJlKGJ1Y2tldEtleUlzTnVtYmVyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0
S2V5SXNOdW1iZXIsIGJvdGhBcmVOdW1iZXJzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90
TnVtYmVyKGtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShib3Ro
QXJlTnVtYmVycykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVOdW1iZXJzLCBi
dWNrZXRLZXlJc0ludDMyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYnVja2V0
S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShidWNrZXRLZXlJc0lu
dDMyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJbnQzMiwgbG9vcEFy
b3VuZCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGtleSksCisgICAgICAgICAg
ICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGxvb3BBcm91bmQsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21p
bmdUb1BoaSh1bm1hc2tlZEluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291
dC5pbnQzMk9uZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVy
VHlwZSgpLAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJh
dGlvbkpTU2V0RmluZEJ1Y2tldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSwgaGFzaCkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
bm90UHJlc2VudEluVGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG5vdFByZXNlbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5w
aGkocG9pbnRlclR5cGUoKSwgYnVja2V0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2Vu
dFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQo
KQorICAgIHsKKyAgICAgICAgTFZhbHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUt
PmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9j
aygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5j
aG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisK
KyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJ
bnRQdHIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNC
dWNrZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGhhc0J1Y2tldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFz
aE1hcEJ1Y2tldF92YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAg
IHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0
KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCgpCisgICAg
eworICAgICAgICBMVmFsdWUgYnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0LCBtX291dC5j
b25zdEludFB0cigwKSk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKKyAgICB9CisKICAg
ICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpOwpAQCAtOTkyOCw2ICsxMDE2MywyMCBAQCBwcml2YXRlOgogICAgICAgICBz
cGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CisKKyAgICBMVmFsdWUgbG93TWFwT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVN
YXBPYmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBMVmFsdWUgbG93U2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRn
ZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZh
bHVlIGxvd1N0cmluZyhFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1
dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICB7CkBAIC0xMDA1MSw2ICsxMDMwMCwxNyBA
QCBwcml2YXRlOgogICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExWYWx1ZSBsb3dNYXBCdWNrZXQoRWRn
ZSBlZGdlKQorICAgIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fbWFwQnVj
a2V0VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2Rl
KCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExW
YWx1ZSBzdHJpY3RJbnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpA
QCAtMTAzNTQsNiArMTA2MTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmpl
Y3RVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVj
dWxhdGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
ZXRPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSk7CisgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6CiAgICAgICAgICAgICBzcGVj
dWxhdGVTdHJpbmcoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjgyLDYgKzEwOTQ4
LDI4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRn
ZSwgbG93Q2VsbChlZGdlKSk7CiAgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3Qo
RWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAor
ICAgICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjTWFwT2JqZWN0LCBpc05v
dFR5cGUoY2VsbCwgSlNNYXBUeXBlKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBP
YmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2Us
IGxvd0NlbGwoZWRnZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVk
Z2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1NldE9iamVjdCwgaXNOb3RU
eXBlKGNlbGwsIEpTU2V0VHlwZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2Jq
ZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBs
b3dDZWxsKGVkZ2UpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRn
ZSBlZGdlLCBMVmFsdWUgY2VsbCkKICAgICB7CkBAIC0xMTQ1MCw2ICsxMTczOCwxMCBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9k
ZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tl
dChOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21hcEJ1Y2tldFZh
bHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAg
ICB9CiAgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsK
ICAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUs
IG1faGlnaEJsb2NrKSk7CkBAIC0xMTQ4Myw2ICsxMTc3NSwxMCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXRN
YXBCdWNrZXQoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fbm9k
ZSwgdmFsdWUpOworICAgIH0KICAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCiAgICAg
ewogICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CkBAIC0xMTY2Niw2ICsxMTk2Miw3
IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1Zh
bHVlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVh
blZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VW
YWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9tYXBCdWNrZXRW
YWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1
ZXM7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIEIz
IGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50cy4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9u
IDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1MiBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0pOwogfQogCisjaWYgVVNFKEpTVkFMVUU2
NCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpqc01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0
LCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBHUFJSZWcgaW5wdXQgPSBpbnB1dEFuZFJlc3VsdDsK
KyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOwor
ICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzMiksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0
Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAy
Mik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0z
MigyMiksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkg
Kz0gfihrZXkgPDwgMTMpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0
KFRydXN0ZWRJbW0zMigxMyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFk
ZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiA4KTsKKyAgICBtb3Zl
KGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDgpLCBzY3JhdGNo
KTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7
CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMp
LCBzY3JhdGNoKTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChr
ZXkgPj4gMTUpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMTUpLCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAg
Ly8ga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBs
c2hpZnQ2NChUcnVzdGVkSW1tMzIoMjcpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsK
KyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gMzEpOwor
ICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoMzEp
LCBzY3JhdGNoKTsKKyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisKKyAgICAvLyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2NChUcnVzdGVk
SW1tUHRyKG1hc2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBBU1NF
UlQobV9iYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpID09IEpJVENvZGU6Ok5vbmUgfHwgSklU
Q29kZTo6aXNCYXNlbGluZUNvZGUobV9iYXNlbGluZUNvZGVCbG9jay0+aml0VHlwZSgpKSk7CiAg
ICAgICAgIH0KICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHZvaWQganNNYXBIYXNo
KEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gpOworI2VuZGlmCiAgICAgCiAg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVCbG9jazsgfQogICAgIFZN
KiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBA
IHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxs
KiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0WlopKEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9O
ICpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2Vs
bCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShFeGVjU3RhdGUqLCBKU1Nj
b3BlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElP
TiAqQ19KSVRPcGVyYXRpb25fRUNKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFs
dWUsIGludDMyX3QpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0
aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVy
YXRpb25fRykoSlNHbG9iYWxPYmplY3QqKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9O
ICpEX0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIK
KworI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkNvcHlWaXNpdG9y
SW5saW5lcy5oIgorI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsKKwordGVtcGxhdGU8PgorY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRy
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXk+KSB9OwordGVtcGxhdGU8PgorY29uc3QgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51
bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPikgfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+Cit2b2lkIEhhc2hN
YXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICBIYXNoTWFwQnVja2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hN
YXBCdWNrZXQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX25leHQpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ByZXYpOworCisgICAgc3RhdGljX2Fzc2VydChzaXpl
b2YoRGF0YSkgJSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSA9PSAwLCAiV2UgYXNzdW1l
IHRoYXQgdGhlc2UgYXJlIGZpbGxlZCB3aXRoIFdyaXRlQmFycmllcjxVbmtub3duPiBtZW1iZXJz
IG9ubHkuIik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYml0d2lzZV9jYXN0PFdyaXRlQmFy
cmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEpLCBzaXplb2YoRGF0YSkgLyBzaXpl
b2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Cit9CisKK3RlbXBsYXRlPD4KK2NvbnN0IENsYXNz
SW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OnNf
aW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PikgfTsK
K3RlbXBsYXRlPD4KK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6c19pbmZvID0KKyAgICB7ICJIYXNoTWFwSW1wbCIs
IG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBI
YXNoTWFwQnVja2V0Pgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEhhc2hNYXBJ
bXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9oZWFkKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90YWls
KTsKKworICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIE1hcEJhY2tpbmdTdG9yZUNv
cHlUb2tlbiwgdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCksIHRoaXNPYmplY3QtPmJ1ZmZlclNp
emVJbkJ5dGVzKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3Zv
aWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBj
ZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEJhc2U6
OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworCisgICAgSGFzaE1hcElt
cGwqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKKyAgICBpZiAodG9r
ZW4gPT0gTWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENv
cHkodGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCkpKSB7CisgICAgICAgIEhhc2hNYXBCdWZmZXJU
eXBlKiBvbGRCdWZmZXIgPSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKTsKKyAgICAgICAgc2l6
ZV90IGJ1ZmZlclNpemVJbkJ5dGVzID0gdGhpc09iamVjdC0+YnVmZmVyU2l6ZUluQnl0ZXMoKTsK
KyAgICAgICAgSGFzaE1hcEJ1ZmZlclR5cGUqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hN
YXBCdWZmZXJUeXBlKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGJ1ZmZlclNpemVJbkJ5dGVz
KSk7CisgICAgICAgIG1lbWNweShuZXdCdWZmZXIsIG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0
ZXMpOworICAgICAgICB0aGlzT2JqZWN0LT5tX2J1ZmZlci5zZXRXaXRob3V0QmFycmllcihuZXdC
dWZmZXIpOworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkQnVmZmVyLCBidWZmZXJTaXplSW5C
eXRlcyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEhhc2hNYXBC
dWNrZXREYXRhS2V5IHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworfTsKKworc3Ry
dWN0IEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWUgeworICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBrZXk7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIERhdGE+CitjbGFzcyBIYXNoTWFwQnVja2V0IDogcHVibGljIEpTQ2VsbCB7Cisg
ICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0
YT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhh
c2hNYXBCdWNrZXREYXRhS2V5Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVj
dHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldFNldFN0
cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+
CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNo
TWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0
cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldE1h
cFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBK
U1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXQqIGNy
ZWF0ZShWTSYgdm0pCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNoTWFwQnVja2V0Pih2bS5oZWFwKSkgSGFzaE1hcEJ1
Y2tldCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGJ1Y2tldC0+ZmluaXNoQ3Jl
YXRpb24odm0pOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghYnVja2V0LT5uZXh0KCkpOworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghYnVja2V0LT5wcmV2KCkpOworICAgICAgICByZXR1cm4gYnVj
a2V0OworICAgIH0KKworICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBIYXNoTWFwQnVj
a2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQorICAgIHsgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldE5leHQoVk0mIHZt
LCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICBtX25leHQuc2V0KHZtLCB0
aGlzLCBidWNrZXQpOworICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UHJldihWTSYg
dm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIG1fcHJldi5zZXQodm0s
IHRoaXMsIGJ1Y2tldCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEtleShW
TSYgdm0sIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgbV9kYXRhLmtleS5zZXQodm0sIHRo
aXMsIGtleSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAg
IEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhh
c2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZT46OnR5cGUgc2V0VmFsdWUoVk0mIHZtLCBK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9kYXRhLnZhbHVlLnNldCh2bSwgdGhpcywg
dmFsdWUpOworICAgIH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxX
QVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1h
cEJ1Y2tldERhdGFLZXk+Ojp2YWx1ZT46OnR5cGUgc2V0VmFsdWUoVk0mLCBKU1ZhbHVlKSB7IH0K
KworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBrZXkoKSBjb25zdCB7IHJldHVybiBtX2RhdGEu
a2V5LmdldCgpOyB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxX
QVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlLCBKU1ZhbHVlPjo6dHlwZSB2YWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9kYXRhLnZhbHVlLmdldCgpOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAg
IEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4
dC5nZXQoKTsgfQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0
IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGRlbGV0
ZWQoKSBjb25zdCB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0RGVsZXRlZChib29sIGRlbGV0ZWQpIHsgbV9kZWxldGVkID0gZGVsZXRlZDsgfQorCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZktleSgpCisgICAgeworICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEhhc2hNYXBCdWNrZXQsIG1fZGF0YSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRGF0
YSwga2V5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAg
c3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVj
a2V0RGF0YUtleVZhbHVlPjo6dmFsdWUsIHB0cmRpZmZfdD46OnR5cGUgb2Zmc2V0T2ZWYWx1ZSgp
CisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBCdWNrZXQsIG1f
ZGF0YSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwgdmFsdWUpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBEYXRhIG1fZGF0YTsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9uZXh0
OworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX3ByZXY7CisgICAgYm9vbCBtX2Rl
bGV0ZWQgeyBmYWxzZSB9OworCit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnVja2V0VHlwZT4K
K2NsYXNzIEhhc2hNYXBCdWZmZXIgeworcHVibGljOgorICAgIEhhc2hNYXBCdWZmZXIoKSA9IGRl
bGV0ZTsKKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgY2FwYWNp
dHkpCisgICAgeworICAgICAgICByZXR1cm4gY2FwYWNpdHkgKiBzaXplb2YoQnVja2V0VHlwZSop
OworICAgIH0KKworICAgIEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxCdWNrZXRUeXBlKio+KHRoaXMpOworICAgIH0KKworICAg
IHN0YXRpYyBIYXNoTWFwQnVmZmVyKiBjcmVhdGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1aW50
MzJfdCBjYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhh
c2hNYXBCdWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAgICAgdm9pZCogZGF0
YSA9IG51bGxwdHI7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIodm0uaGVhcCk7Cisg
ICAgICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIGFsbG9jYXRpb25T
aXplLCAmZGF0YSkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyAgRklYTUU6IHRocm93IGFuIGV4Y2VwdGlvbiBoZXJlLgorICAgICAgICBIYXNoTWFwQnVmZmVy
KiBidWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyKj4oZGF0YSk7CisgICAgICAgIG1l
bXNldChidWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIHJldHVybiBidWZmZXI7
CisgICAgfQorCit9OworCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGFyZUtleXNFcXVhbChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIC8vIFdlIHdhbnQg
KzAgYW5kIC0wIHRvIGJlIGNvbXBhcmVkIHRvIHRydWUgaGVyZS4gc2FtZVZhbHVlKCkgaXRzZWxm
IGRvZXNuJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhhdCwgaG93ZXZlciwgd2Ugbm9ybWFsaXplIGFs
bCBrZXlzIGJlZm9yZSBjb21wYXJpbmcgYW5kIHN0b3JpbmcKKyAgICAvLyB0aGVtIGluIHRoZSBt
YXAuIFRoZSBub3JtYWxpemF0aW9uIHdpbGwgY29udmVydCAtMC4wIGFuZCAwLjAgdG8gdGhlIGlu
dGVnZXIKKyAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgMC4KKyAgICByZXR1cm4gc2FtZVZhbHVl
KGV4ZWMsIGEsIGIpOworfQorCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbm9ybWFsaXplTWFwS2V5
KEpTVmFsdWUga2V5KQoreworICAgIGlmICgha2V5LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVy
biBrZXk7CisKKyAgICBpZiAoa2V5LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGtleTsKKwor
ICAgIGRvdWJsZSBkID0ga2V5LmFzRG91YmxlKCk7CisgICAgaWYgKHN0ZDo6aXNuYW4oZCkpCisg
ICAgICAgIHJldHVybiBrZXk7CisKKyAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4oZCk7Cisg
ICAgaWYgKGkgPT0gZCkgeworICAgICAgICAvLyBXaGVuIGEga2V5IGlzIC0wLCB3ZSBjb252ZXJ0
IGl0IHRvIHBvc2l0aXZlIHplcm8uCisgICAgICAgIC8vIFdoZW4gYSBrZXkgaXMgdGhlIGRvdWJs
ZSByZXByZXNlbnRhdGlvbiBmb3IgYW4gaW50ZWdlciwgd2UgY29udmVydCBpdCB0byBhbiBpbnRl
Z2VyLgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaSk7CisgICAgfQorICAgIC8vIFRoaXMgbWVh
bnMga2V5IGlzIGRlZmluaXRlbHkgbm90IG5lZ2F0aXZlIHplcm8sIGFuZCBpdCdzIGRlZmluaXRl
bHkgbm90IGEgZG91YmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIAorICAgIHJldHVy
biBrZXk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vcm1hbGl6
ZU1hcEtleSh2YWx1ZSkgPT0gdmFsdWUsICJXZSBleHBlY3Qgbm9ybWFsaXplZCB2YWx1ZXMgZmxv
d2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uIik7CisKKyAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkg
eworICAgICAgICBkb3VibGUgZCA9IHZhbHVlLmFzRG91YmxlKCk7CisgICAgICAgIGlmICghc3Rk
Ojppc25hbihkKSkgeworICAgICAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOwor
ICAgICAgICAgICAgaWYgKGkgPT0gZCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzTnVtYmVy
KGkpOworICAgICAgICB9CisgICAgfQorICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAg
ICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSk7CisgICAgICAgIGNvbnN0IFN0
cmluZyYgd3RmU3RyaW5nID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICAgICAgaWYgKFVOTElL
RUxZKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsK
KyAgICAgICAgcmV0dXJuIHd0ZlN0cmluZy5pbXBsKCktPmhhc2goKTsKKyAgICB9CisgICAgdWlu
dDY0X3QgcmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIC8vIEZJWE1FOiB3
cml0ZSBvdXQgb3VyIG93biBpbnQgaGFzaCBmdW5jdGlvbiBzbyB3ZSdyZSBub3QgZGVwZW5kZW50
IG9uIFdURidzIGhhc2ggZnVuY3Rpb24uCisgICAgcmV0dXJuIFdURjo6aW50SGFzaChyYXdWYWx1
ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK2NsYXNzIEhh
c2hNYXBJbXBsIDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAg
ICB0eXBlZGVmIEhhc2hNYXBCdWZmZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBCdWZmZXJU
eXBlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAg
ICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNl
bGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcElt
cGxTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQg
PSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9
CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVj
dHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3Ry
dWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwSW1wbCog
Y3JlYXRlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKAorICAgICAgICAg
ICAgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkgPT0g
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZLZXkoKSk7
CisKKyAgICAgICAgSGFzaE1hcEltcGwqIGltcGwgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxIYXNoTWFwSW1wbD4odm0uaGVhcCkpIEhhc2hNYXBJbXBsKHZtLCBzZWxlY3RTdHJ1Y3R1cmUo
dm0pKTsKKyAgICAgICAgaW1wbC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICByZXR1cm4g
aW1wbDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7CisgICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBD
b3B5VmlzaXRvciYsIENvcHlUb2tlbik7CisKKyAgICBIYXNoTWFwSW1wbChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAgICAg
LCBtX3NpemUoMCkKKyAgICAgICAgLCBtX2RlbGV0ZUNvdW50KDApCisgICAgICAgICwgbV9jYXBh
Y2l0eSg0KQorICAgIHsKKyAgICB9CisKKyAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZlcigpOwor
ICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQorICAgIHsKKyAgICAgICAg
QmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgICAgIG1ha2VBbmRTZXROZXdCdWZmZXIo
dm0pOworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FwYWNpdHk7IGkrKykKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXNFbXB0eShidWZmZXIoKVtpXSkpOworICAgICAgICB9CisKKyAgICAgICAgbV9oZWFkLnNl
dCh2bSwgdGhpcywgSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSkpOworICAgICAgICBtX3Rh
aWwuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisKKyAgICAg
ICAgbV9oZWFkLT5zZXROZXh0KHZtLCBtX3RhaWwuZ2V0KCkpOworICAgICAgICBtX3RhaWwtPnNl
dFByZXYodm0sIG1faGVhZC5nZXQoKSk7CisgICAgICAgIG1faGVhZC0+c2V0RGVsZXRlZCh0cnVl
KTsKKyAgICAgICAgbV90YWlsLT5zZXREZWxldGVkKHRydWUpOworCisgICAgfQorCisgICAgc3Rh
dGljIEhhc2hNYXBCdWNrZXRUeXBlKiBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBiaXR3aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldFR5cGUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KC0xKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0VtcHR5KEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCisgICAgeworICAgICAgICByZXR1cm4gYnVja2V0ID09
IGVtcHR5VmFsdWUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUqIGRl
bGV0ZWRWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBC
dWNrZXRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigtMykpOworICAgIH0KKworICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEZWxldGVkKEhhc2hNYXBCdWNrZXRUeXBlKiBidWNr
ZXQpCisgICAgeworICAgICAgICByZXR1cm4gYnVja2V0ID09IGRlbGV0ZWRWYWx1ZSgpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICB1aW50MzJfdCBoYXNo
ID0ganNNYXBIYXNoKGV4ZWMsIGtleSk7CisgICAgICAgIGlmIChVTkxJS0VMWShleGVjLT5oYWRF
eGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IGZpbmRCdWNrZXQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
a2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAga2V5ID0gbm9ybWFsaXplTWFwS2V5
KGtleSk7CisgICAgICAgIHJldHVybiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6
ZWQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
Z2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBpZiAoSGFz
aE1hcEJ1Y2tldFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSkpCisgICAgICAg
ICAgICByZXR1cm4gKCpidWNrZXQpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gISFmaW5kQnVja2V0KGV4ZWMs
IGtleSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgIHsKKyAgICAg
ICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CisKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAg
ICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBrZXkpICYgbWFzazsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHZtLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIHdo
aWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZChidWNr
ZXQpICYmIGFyZUtleXNFcXVhbChleGVjLCBrZXksIGJ1Y2tldC0+a2V5KCkpKSB7CisgICAgICAg
ICAgICAgICAgYnVja2V0LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBt
YXNrOworICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgfQorCisg
ICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXdFbnRyeSA9IG1fdGFpbC5nZXQoKTsKKyAgICAg
ICAgYnVmZmVyW2luZGV4XSA9IG5ld0VudHJ5OworICAgICAgICBuZXdFbnRyeS0+c2V0S2V5KHZt
LCBrZXkpOworICAgICAgICBuZXdFbnRyeS0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAgICAgICAg
bmV3RW50cnktPnNldERlbGV0ZWQoZmFsc2UpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSog
bmV3VGFpbCA9IEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBtX3RhaWwu
c2V0KHZtLCB0aGlzLCBuZXdUYWlsKTsKKyAgICAgICAgbmV3VGFpbC0+c2V0UHJldih2bSwgbmV3
RW50cnkpOworICAgICAgICBuZXdUYWlsLT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBuZXdF
bnRyeS0+c2V0TmV4dCh2bSwgbmV3VGFpbCk7CisgICAgICAgIHVpbnQzMl90IG5ld1NpemUgPSAr
K21fc2l6ZTsKKyAgICAgICAgaWYgKDIqbmV3U2l6ZSA+IG1fY2FwYWNpdHkpCisgICAgICAgICAg
ICByZWhhc2goZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIHJlbW92ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tl
dFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSk7CisgICAgICAgIGlmICghYnVj
a2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBpbXBsID0gKmJ1Y2tldDsKKyAgICAg
ICAgaW1wbC0+bmV4dCgpLT5zZXRQcmV2KHZtLCBpbXBsLT5wcmV2KCkpOworICAgICAgICBpbXBs
LT5wcmV2KCktPnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7CisgICAgICAgIGltcGwtPnNldERl
bGV0ZWQodHJ1ZSk7CisKKyAgICAgICAgKmJ1Y2tldCA9IGRlbGV0ZWRWYWx1ZSgpOworCisgICAg
ICAgIG1fZGVsZXRlQ291bnQrKzsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQobV9zaXplID49IG1fZGVsZXRlQ291bnQpOworICAgICAgICByZXR1cm4gbV9z
aXplIC0gbV9kZWxldGVDb3VudDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xl
YXIoRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICAgICAgbV9zaXplID0gMDsKKyAgICAgICAgbV9kZWxldGVDb3VudCA9IDA7CisgICAgICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiBoZWFkID0gbV9oZWFkLmdldCgpOworICAgICAgICBIYXNoTWFw
QnVja2V0VHlwZSogYnVja2V0ID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiB0YWlsID0gbV90YWlsLmdldCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICE9IHRh
aWwpIHsKKyAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXh0ID0gYnVja2V0LT5uZXh0
KCk7CisgICAgICAgICAgICAvLyBXZSByZXN0YXJ0IGVhY2ggaXRlcmF0b3IgYnkgcG9pbnRpbmcg
aXQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgICAgICAgICAgICBidWNrZXQtPnNldE5leHQo
dm0sIGhlYWQpOworICAgICAgICAgICAgYnVja2V0ID0gbmV4dDsKKyAgICAgICAgfQorICAgICAg
ICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0
UHJldih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9jYXBhY2l0eSA9IDQ7CisgICAgICAg
IG1ha2VBbmRTZXROZXdCdWZmZXIodm0pOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgc2l6
ZV90IGJ1ZmZlclNpemVJbkJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Nh
cGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXRUeXBlKik7CisgICAgfQorCisgICAgc3RhdGlj
IHB0cmRpZmZfdCBvZmZzZXRPZkJ1ZmZlcigpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPiwgbV9idWZmZXIpOworICAg
IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYXBhY2l0eSgpCisgICAgeworICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBl
PiwgbV9jYXBhY2l0eSk7CisgICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQoKSB7
IHJldHVybiBtX2hlYWQuZ2V0KCk7IH0KKyAgICBIYXNoTWFwQnVja2V0VHlwZSogdGFpbCgpIHsg
cmV0dXJuIG1fdGFpbC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgSGFz
aE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6ZWQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAg
IGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMyX3Qg
aW5kZXggPSBoYXNoICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIg
PSB0aGlzLT5idWZmZXIoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1
ZmZlcltpbmRleF07CisKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAg
ICAgICAgIGlmICghaXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwg
YnVja2V0LT5rZXkoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciArIGluZGV4Owor
ICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNr
ZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIHZvaWQgcmVoYXNoKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICAgICAgbV9jYXBhY2l0eSA9IG1fY2FwYWNpdHkg
KiAyOworICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKHZtKTsKKworICAgICAgICBIYXNoTWFw
QnVja2V0VHlwZSogaXRlciA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNoTWFwQnVja2V0
VHlwZSogZW5kID0gbV90YWlsLmdldCgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0g
bV9jYXBhY2l0eSAtIDE7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9jYXBhY2l0eSAmICht
X2NhcGFjaXR5IC0gMSkpKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0
aGlzLT5idWZmZXIoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgICAg
ICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCBpdGVyLT5rZXkoKSkgJiBtYXNrOwor
ICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghdm0uZXhjZXB0aW9uKCksICJBbGwga2V5
cyBzaG91bGQgYWxyZWFkeSBiZSBoYXNoZWQgYmVmb3JlLCBzbyB0aGlzIHNob3VsZCBub3QgdGhy
b3cgYmVjYXVzZSBpdCB3b24ndCByZXNvbHZlIHJvcGVzLiIpOworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOwor
ICAgICAgICAgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgICAgICAgICBi
dWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBpdGVyOworICAgICAgICAgICAgaXRlciA9IGl0
ZXItPm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbWFrZUFuZFNldE5ld0J1
ZmZlcihWTSYgdm0pCisgICAgeworICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2Fw
YWNpdHkgLSAxKSkpOworICAgICAgICBtX2J1ZmZlci5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWZm
ZXJUeXBlOjpjcmVhdGUodm0sIHRoaXMsIG1fY2FwYWNpdHkpKTsKKyAgICAgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Nh
cGFjaXR5OyBpKyspCisgICAgICAgICAgICAgICAgQVNTRVJUKGlzRW1wdHkodGhpcy0+YnVmZmVy
KClbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVj
a2V0VHlwZT4gbV9oZWFkOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV90
YWlsOworICAgIENvcHlCYXJyaWVyPEhhc2hNYXBCdWZmZXJUeXBlPiBtX2J1ZmZlcjsKKyAgICB1
aW50MzJfdCBtX3NpemU7CisgICAgdWludDMyX3QgbV9kZWxldGVDb3VudDsKKyAgICB1aW50MzJf
dCBtX2NhcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDYgKzYyLDkgQEAgZW51bSBKU19FWFBPUlRfUFJJVkFURSBJbnRyaW5zaWMgewogICAgIElz
UmVnRXhwT2JqZWN0SW50cmluc2ljLAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAg
ICAgQm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAgIEpTTWFwR2V0SW50
cmluc2ljLAorICAgIEpTTWFwSGFzSW50cmluc2ljLAorICAgIEpTU2V0SGFzSW50cmluc2ljLAog
CiAgICAgLy8gR2V0dGVyIGludHJpbnNpY3MuCiAgICAgVHlwZWRBcnJheUxlbmd0aEludHJpbnNp
YywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw5IEBAIGlubGluZSBib29sIG9wZXJh
dG9yIT0oY29uc3QgSlNDZWxsKiBhLCAKIAogYm9vbCBpc1RoaXNWYWx1ZUFsdGVyZWQoY29uc3Qg
UHV0UHJvcGVydHlTbG90JiwgSlNPYmplY3QqIGJhc2VPYmplY3QpOwogCisvLyBTZWUgc2VjdGlv
biA3LjIuOTogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlCiti
b29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYik7CisKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNDSlNWYWx1ZV9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9u
IDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTgsNiArMTA1OCwyMiBAQCBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNUaGlzVmFsdWVBbHRlcmVkKGNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFNl
ZSBzZWN0aW9uIDcuMi45OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zYW1l
dmFsdWUKK0FMV0FZU19JTkxJTkUgYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICBpZiAoIWEuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGEsIGIpOworICAgIGlmICghYi5pc051bWJl
cigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG91YmxlIHggPSBhLmFzTnVtYmVyKCk7
CisgICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7CisgICAgYm9vbCB4SXNOYU4gPSBzdGQ6Omlz
bmFuKHgpOworICAgIGJvb2wgeUlzTmFOID0gc3RkOjppc25hbih5KTsKKyAgICBpZiAoeElzTmFO
IHx8IHlJc05hTikKKyAgICAgICAgcmV0dXJuIHhJc05hTiAmJiB5SXNOYU47CisgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgPT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih5KTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1ZhbHVlSW5saW5lc19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDEwICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkpTTWFwLmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKKyNpbmNsdWRlICJDb21tb25J
ZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNp
bmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgogI2luY2x1ZGUg
Ik1hcERhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgi
CiAKQEAgLTM3LDY3ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8g
SlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewot
ICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgdGhpc09i
amVjdC0+SlNNYXA6On5KU01hcCgpOwotfQotCi1zaXplX3QgSlNNYXA6OmVzdGltYXRlZFNpemUo
SlNDZWxsKiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4o
Y2VsbCk7Ci0gICAgc2l6ZV90IG1hcERhdGFTaXplID0gdGhpc09iamVjdC0+bV9tYXBEYXRhLmNh
cGFjaXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsg
bWFwRGF0YVNpemU7Ci19Ci0KIFN0cmluZyBKU01hcDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3QiKTsK
IH0KIAotdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0g
ICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZp
c2l0b3IpOwotfQotCi12b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwg
Q29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBCYXNlOjpjb3B5
QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nhc3Q8SlNNYXAqPihj
ZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOwotfQotCi1i
b29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAgICByZXR1
cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Ci19Ci0KLXNpemVfdCBKU01hcDo6c2l6
ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4ZWMpOwot
fQotCi1KU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsK
LSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5KTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQotdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpT
VmFsdWUgdmFsdWUpCi17Ci0gICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlzLCBrZXksIHZhbHVl
KTsKLX0KLQotdm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAgICBtX21hcERhdGEu
Y2xlYXIoKTsKLX0KLQotYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXkpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywga2V5KTsKLX0KLQog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNiw3MyArMjYsMjMgQEAKICNpZm5kZWYgSlNNYXBfaAogI2RlZmluZSBKU01hcF9o
CiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgorI2luY2x1ZGUgIk1hcEJhc2Uu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEpTTWFwSXRlcmF0b3I7CiAKLWNsYXNzIEpTTWFwIDogcHVibGlj
IEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTTWFwIDogcHVibGljIE1hcEJhc2U8SGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4geworICAgIHR5cGVkZWYgTWFw
QmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+PiBCYXNlOwogcHVi
bGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKLQogICAgIGZyaWVu
ZCBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi0gICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4
cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCi0gICAgLy8g
ZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgotICAgIGNsYXNzIEVudHJ5IHsKLSAgICBw
cml2YXRlOgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7Ci0gICAgICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOwotCi0gICAgcHVibGljOgotICAgICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2tleTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFdyaXRlQmFycmll
cjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bV92YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICAgICAgewotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1f
a2V5KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1
ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNW
YWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mIHZtLCBj
b25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX3ZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5jbGVhcigpOwotICAgICAg
ICAgICAgbV92YWx1ZS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHR5cGVkZWYg
TWFwRGF0YUltcGw8RW50cnksIEpTTWFwSXRlcmF0b3I+IE1hcERhdGE7Ci0KICAgICBERUNMQVJF
X0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAg
ICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKEpTTWFwVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAg
IH0KIAogICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC0xMDcsMjcgKzU3LDIzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNyZWF0ZShl
eGVjLT52bSgpLCBzdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIGJvb2wgaGFzKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOwotICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopOwotICAgIEpTVmFsdWUgZ2V0
KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0KEV4
ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4
ZWNTdGF0ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX21hcC0+Z2V0KGV4ZWMsIGtleSk7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9tYXAtPmFkZChleGVjLCBrZXksIHZhbHVlKTsK
KyAgICB9CiAKIHByaXZhdGU6CiAgICAgSlNNYXAoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9tYXBEYXRhKHZt
LCB0aGlzKQogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OwotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKLSAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZv
aWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAg
ICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUq
KTsKLQotICAgIE1hcERhdGEgbV9tYXBEYXRhOwogfTsKIAogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNTMw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiSlNNYXBJdGVyYXRvci5oIgogCisjaW5jbHVkZSAiQnVpbHRpbk5hbWVzLmgiCisjaW5j
bHVkZSAiQ29tbW9uSWRlbnRpZmllcnMuaCIKKyNpbmNsdWRlICJJZGVudGlmaWVySW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTTWFwLmgiCkBAIC00MSw2ICs0NCw3IEBAIHZvaWQgSlNNYXBJdGVy
YXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgbV9tYXAuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7CisgICAgc2V0SXRl
cmF0b3Iodm0sIG1fbWFwLT5pbXBsKCktPmhlYWQoKSk7CiB9CiAKIHZvaWQgSlNNYXBJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAt
NDksNiArNTMsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAg
ICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fbWFwKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9pdGVyKTsKIH0KIAogSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcmFt
ZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTYyLDggKzY3LDkg
QEAgSlNWYWx1ZSBKU01hcEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcgogCiBKU01hcEl0ZXJh
dG9yKiBKU01hcEl0ZXJhdG9yOjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBj
bG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxsZWUoKS0+
Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgpLCBtX2tp
bmQpOwotICAgIGNsb25lLT5tX2l0ZXJhdG9yID0gbV9pdGVyYXRvcjsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIGF1dG8gY2xvbmUgPSBKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGV4
ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9t
YXAuZ2V0KCksIG1fa2luZCk7CisgICAgY2xvbmUtPnNldEl0ZXJhdG9yKHZtLCBtX2l0ZXIuZ2V0
KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNNYXBJdGVyYXRvciA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4gSGFzaE1hcEJ1Y2tldDsKIHB1YmxpYzoKICAgICB0eXBl
ZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIApAQCAtNTEsNTIgKzUyLDYyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0KiBhZHZhbmNlSXRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBXVEY6
OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRl
cmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogcHJldiA9IG1faXRlci5n
ZXQoKTsKKyAgICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOworICAgICAgICB3
aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKSB7CisgICAgICAgICAgICBwcmV2ID0g
YnVja2V0OworICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZt
KCksIG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAg
ICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgYnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0ZXIg
b24gdGhlIGxhc3QgdmFsdWUuCisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorICAgIGJv
b2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAg
SGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7CisgICAgICAgIGlmICgh
YnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGlmIChtX2tpbmQg
PT0gSXRlcmF0ZVZhbHVlKQotICAgICAgICAgICAgdmFsdWUgPSBwYWlyLnZhbHVlOworICAgICAg
ICAgICAgdmFsdWUgPSBidWNrZXQtPnZhbHVlKCk7CiAgICAgICAgIGVsc2UgaWYgKG1fa2luZCA9
PSBJdGVyYXRlS2V5KQotICAgICAgICAgICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAg
IHZhbHVlID0gYnVja2V0LT5rZXkoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUg
PSBjcmVhdGVQYWlyKGNhbGxGcmFtZSwgcGFpci5rZXksIHBhaXIudmFsdWUpOworICAgICAgICAg
ICAgdmFsdWUgPSBjcmVhdGVQYWlyKGV4ZWMsIGJ1Y2tldC0+a2V5KCksIGJ1Y2tldC0+dmFsdWUo
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dEtleVZhbHVl
KEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgYm9vbCBuZXh0S2V5VmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBrZXksIEpTVmFsdWUmIHZhbHVlKQogICAgIHsKLSAgICAg
ICAgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYg
KCFtX2l0ZXJhdG9yLm5leHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9
IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgICAgICBrZXkgPSBwYWlyLmtleTsKLSAgICAgICAgdmFsdWUgPSBw
YWlyLnZhbHVlOworICAgICAgICBrZXkgPSBidWNrZXQtPmtleSgpOworICAgICAgICB2YWx1ZSA9
IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9p
ZCBmaW5pc2goKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsKLSAgICB9Ci0K
ICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICBK
U1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX21hcC5nZXQoKTsgfQogICAg
IEpTTWFwSXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNNYXA6Ok1hcERhdGE6
Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9p
dGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNNYXBJdGVyYXRvcihWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCogaXRlcmF0ZWRPYmplY3QsIEl0ZXJhdGlvbktpbmQg
a2luZCkKKyAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpT
TWFwKiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkK
LSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX21hcERhdGEuY3JlYXRlSXRl
cmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQorICAgIHsgfQorCisgICAg
dm9pZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkKICAgICB7Cisg
ICAgICAgIG1faXRlci5zZXRNYXlCZU51bGwodm0sIHRoaXMsIGJ1Y2tldCk7CiAgICAgfQogCiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTTWFwKik7CkBA
IC0xMDQsNyArMTE1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNNYXA+IG1fbWFw
OwotICAgIEpTTWFwOjpNYXBEYXRhOjpJdGVyYXRvckRhdGEgbV9pdGVyYXRvcjsKKyAgICBXcml0
ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9pdGVyOwogICAgIEl0ZXJhdGlvbktpbmQgbV9raW5k
OwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJh
dG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzcsNTkgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0
IENsYXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JF
QVRFX01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAotdm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwq
IGNlbGwpCi17Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsK
LSAgICB0aGlzT2JqZWN0LT5KU1NldDo6fkpTU2V0KCk7Ci19Ci0KIFN0cmluZyBKU1NldDo6dG9T
dHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVND
SUlMaXRlcmFsKCJPYmplY3QiKTsKIH0KIAotc2l6ZV90IEpTU2V0Ojplc3RpbWF0ZWRTaXplKEpT
Q2VsbCogY2VsbCkKLXsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNl
bGwpOwotICAgIHNpemVfdCBzZXREYXRhU2l6ZSA9IHRoaXNPYmplY3QtPm1fc2V0RGF0YS5jYXBh
Y2l0eUluQnl0ZXMoKTsKLSAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIHNl
dERhdGFTaXplOwotfQotCi12b2lkIEpTU2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2
aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLnZpc2l0Q2hpbGRy
ZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNTZXQ6OmNvcHlCYWNraW5nU3RvcmUoSlND
ZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewotICAg
IEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwotICAgIGpzQ2Fz
dDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tl
bik7Ci19Ci0KLWJvb2wgSlNTZXQ6OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUp
Ci17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5jb250YWlucyhleGVjLCB2YWx1ZSk7Ci19Ci0KLXNp
emVfdCBKU1NldDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0
YS5zaXplKGV4ZWMpOwotfQotCi12b2lkIEpTU2V0OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHZhbHVlKQotewotICAgIG1fc2V0RGF0YS5zZXQoZXhlYywgdGhpcywgdmFsdWUsIHZhbHVl
KTsKLX0KLQotdm9pZCBKU1NldDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAgICBtX3NldERhdGEu
Y2xlYXIoKTsKLX0KLQotYm9vbCBKU1NldDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9zZXREYXRhLnJlbW92ZShleGVjLCB2YWx1ZSk7Ci19
Ci0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkocmV2aXNpb24g
MjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYsNjkgKzI2LDI1IEBACiAjaWZuZGVmIEpTU2V0X2gKICNkZWZpbmUgSlNT
ZXRfaAogCisjaW5jbHVkZSAiTWFwQmFzZS5oIgogI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1NldEl0ZXJhdG9yOwogCi1jbGFzcyBKU1NldCA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU1NldCA6IHB1YmxpYyBNYXBCYXNl
PEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiB7CisgICAgdHlwZWRlZiBNYXBC
YXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiBCYXNlOwogcHVibGljOgot
ICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAogICAgIGZyaWVuZCBjbGFz
cyBKU1NldEl0ZXJhdG9yOwogCi0gICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVjdCBF
bnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCi0gICAgLy8gZmllbGRz
IGJlIFdyaXRlQmFycmllcjxVbmtub3duPgotICAgIGNsYXNzIEVudHJ5IHsKLSAgICBwcml2YXRl
OgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7Ci0KLSAgICBwdWJsaWM6Ci0g
ICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYga2V5KCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9Ci0KLSAgICAgICAgY29uc3Qg
V3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2tleTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICAgICAgewotICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJm1fa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwg
Y29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNl
dEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAg
ICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQgc2V0VmFsdWUoVk0mLCBjb25zdCBKU0NlbGwqLCBKU1ZhbHVlKQotICAgICAgICB7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9rZXkuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0eXBlZGVmIE1hcERh
dGFJbXBsPEVudHJ5LCBKU1NldEl0ZXJhdG9yPiBTZXREYXRhOwotCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhKU1NldFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
ICAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpA
QCAtMTAzLDI2ICs1OSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+
dm0oKSwgc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKLSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0
ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBhZGQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAg
ICAgIG1fbWFwLT5hZGQoZXhlYywga2V5KTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgSlNTZXQo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1
cmUpCi0gICAgICAgICwgbV9zZXREYXRhKHZtLCB0aGlzKQogICAgIHsKICAgICB9CiAKLSAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVk
U2l6ZShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNs
b3RWaXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBD
b3B5VmlzaXRvciYsIENvcHlUb2tlbik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUo
Y29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLQotICAgIFNldERhdGEgbV9zZXREYXRhOwog
fTsKIAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBA
IHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVj
dCk7CisgICAgc2V0SXRlcmF0b3Iodm0sIG1fc2V0LT5pbXBsKCktPmhlYWQoKSk7CiB9CiAKIHZv
aWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpAQCAtNDksNiArNTAsNyBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9pdGVyKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVh
dGVQYWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkK
QEAgLTYyLDggKzY0LDkgQEAgSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxG
cgogCiBKU1NldEl0ZXJhdG9yKiBKU1NldEl0ZXJhdG9yOjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBl
eGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIG1f
c2V0LmdldCgpLCBtX2tpbmQpOwotICAgIGNsb25lLT5tX2l0ZXJhdG9yID0gbV9pdGVyYXRvcjsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2xvbmUgPSBKU1NldEl0ZXJhdG9y
OjpjcmVhdGUodm0sIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JT
dHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1fa2luZCk7CisgICAgY2xvbmUtPnNldEl0ZXJhdG9y
KHZtLCBtX2l0ZXIuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3Mg
SlNTZXRJdGVyYXRvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+IEhhc2hNYXBCdWNrZXQ7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKQEAgLTUyLDQ2ICs1Myw1OSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5l
eHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJ
TkUgSGFzaE1hcEJ1Y2tldCogYWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAg
ICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAg
aWYgKCFtX2l0ZXJhdG9yLm5leHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIHByZXYg
PSBtX2l0ZXIuZ2V0KCk7CisgICAgICAgIGlmICghcHJldikKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsK
KyAgICAgICAgd2hpbGUgKGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkgeworICAgICAgICAg
ICAgcHJldiA9IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOwor
ICAgICAgICB9CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRv
cihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtl
ZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZhbHVlLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAg
IH0KKworICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7Cisg
ICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAg
IGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZhbHVlIHx8IG1fa2luZCA9PSBJdGVyYXRlS2V5KQotICAg
ICAgICAgICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT5r
ZXkoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxG
cmFtZSwgcGFpci5rZXksIHBhaXIua2V5KTsKKyAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFp
cihleGVjLCBidWNrZXQtPmtleSgpLCBidWNrZXQtPmtleSgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2goKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRv
ci5maW5pc2goKTsKLSAgICB9Ci0KICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3NldC5nZXQoKTsgfQogICAgIEpTU2V0SXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwog
Ci0gICAgSlNTZXQ6OlNldERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNT
ZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCogaXRlcmF0ZWRP
YmplY3QsIEl0ZXJhdGlvbktpbmQga2luZCkKKyAgICBKU1NldEl0ZXJhdG9yKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0
LT5tX3NldERhdGEuY3JlYXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChr
aW5kKQogICAgIHsKICAgICB9CiAKKyAgICB2b2lkIHNldEl0ZXJhdG9yKFZNJiB2bSwgSGFzaE1h
cEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgbV9pdGVyLnNldE1heUJlTnVsbCh2bSwg
dGhpcywgYnVja2V0KTsgCisgICAgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYsIEpTU2V0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBj
cmVhdGVQYWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmll
cjxKU1NldD4gbV9zZXQ7Ci0gICAgSlNTZXQ6OlNldERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJh
dG9yOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0
aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKEpTU2V0SXRlcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNU
eXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4MiwxMCBAQCBlbnVtIEpTVHlwZSA6
IHVpbnQ4X3QgewogICAgIE1vZHVsZUVudmlyb25tZW50VHlwZSwKICAgICBSZWdFeHBPYmplY3RU
eXBlLAogICAgIFByb3h5T2JqZWN0VHlwZSwKKyAgICBKU01hcFR5cGUsCisgICAgSlNTZXRUeXBl
LAogCi0gICAgTGFzdEpTQ09iamVjdFR5cGUgPSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpT
Q09iamVjdFR5cGUgPSBKU01hcFR5cGUsCiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNU
eXBlKSA9PSBzaXplb2YodWludDhfdCksIHNpemVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFwQmFzZS5oIgor
CisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+Cit2b2lkIE1hcEJhc2U8SGFzaE1h
cEJ1Y2tldFR5cGU+OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIG1fbWFwLnNldCh2bSwgdGhpcywgSGFzaE1hcEltcGw6OmNyZWF0
ZSh2bSkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+Cit2b2lk
IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgTWFwQmFzZSogdGhpc09iamVjdCA9IHN0YXRp
Y19jYXN0PE1hcEJhc2UqPihjZWxsKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmpl
Y3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK3NpemVfdCBNYXBCYXNl
PEhhc2hNYXBCdWNrZXRUeXBlPjo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCit7CisgICAg
Ly8gRklYTUU6CisgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCk7Cit9CisKK3Rl
bXBsYXRlIGNsYXNzIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZh
bHVlPj47Cit0ZW1wbGF0ZSBjbGFzcyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXk+PjsKKyAgIAorfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBl
PgorY2xhc3MgTWFwQmFzZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBlZGVm
IEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPiBIYXNoTWFwSW1wbDsKKyAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKK3B1YmxpYzoKKworICAgIHR5cGVkZWYgSGFzaE1hcEJ1
Y2tldFR5cGUgQnVja2V0VHlwZTsKKworICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IHNpemUoRXhl
Y1N0YXRlKikKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+c2l6ZSgpOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+aGFzKGV4ZWMsIGtleSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAg
ICAgIG1fbWFwLT5jbGVhcihleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gbV9tYXAtPnJlbW92ZShleGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIHVpbnQzMl90IGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmZpbmRCdWNr
ZXQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSGFzaE1hcEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
YXBCYXNlPEhhc2hNYXBCdWNrZXRUeXBlPiwgbV9tYXApOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEltcGwqIGltcGwoKSB7IHJldHVybiBtX21hcC5nZXQoKTsgfQorCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOworCitwcm90ZWN0ZWQ6
CisgICAgTWFwQmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBlc3Rp
bWF0ZWRTaXplKEpTQ2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwSW1wbD4gbV9tYXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIw
NTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGl0
ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFs
c2UpKTsKLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRy
dWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxNCArNzAsMTMg
QEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiAgICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIs
IG1hcFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgbWFw
UHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQs
IERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOwor
ICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0
SW50cmluc2ljKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVt
LCAxLCBKU01hcEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNTZXQsIERvbnRF
bnVtLCAyKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1
bmNLZXlzLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFt
ZSgpLCBtYXBQcm90b0Z1bmNWYWx1ZXMsIERvbnRFbnVtLCAwKTsKIAotICAgIC8vIFByaXZhdGUg
Z2V0IC8gc2V0IG9wZXJhdGlvbnMuCi0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RS
QU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHJpdmF0ZU5hbWUo
KSwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9JTlRSSU5T
SUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5O
YW1lcygpLmdldFByaXZhdGVOYW1lKCksIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpT
TWFwR2V0SW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zZXRQcml2YXRlTmFtZSgpLCBt
YXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKIAogICAgIEpTRnVuY3Rpb24qIGVudHJpZXMg
PSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUoKS5zdHJpbmcoKSwgbWFwUHJvdG9G
dW5jRW50cmllcyk7CkBAIC05MywxNiArOTIsMjEgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNN
YXAqIGdldE1hcChDYWxsRgogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIXRoaXNWYWx1ZS5p
c09iamVjdCgpKSB7CisgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CiAg
ICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVy
cm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KLSAgICBKU01hcCogbWFwID0ganNEeW5hbWljQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7Ci0g
ICAgaWYgKCFtYXApIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBtYXA7CisKKyAgICBp
ZiAoTElLRUxZKHRoaXNWYWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpTTWFwVHlwZSkpCisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOworICAgIHRocm93VHlwZUVycm9y
KGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24g
bm9uLU1hcCBvYmplY3QiKSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0VuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2Vs
bCgpLT50eXBlKCkgPT0gSlNNYXBUeXBlKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xODksMTEg
KzE5Myw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW4KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1l
LT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNP
YmosIEl0ZXJhdGVLZXkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2
YXRlRnVuY0lzTWFwKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMCkpKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNN
YXBJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8
SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwpAQCAtMjA2LDEzICsyMDUsMTIg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuYwogICAgIEFTU0VSVChq
c0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSkpOwogICAgIEpT
TWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlz
VmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAgIGlmIChpdGVyYXRvci0+bmV4
dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgaWYgKGl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUo
ZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgSlNBcnJheSogcmVzdWx0QXJyYXkgPSBqc0Nh
c3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAgICAgcmVzdWx0
QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIGtleSk7CiAgICAgICAgIHJlc3VsdEFycmF5
LT5wdXREaXJlY3RJbmRleChleGVjLCAxLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgfQotICAgIGl0ZXJhdG9yLT5maW5pc2go
KTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNj
cmlwdG9yLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDIyICsx
OTEsNiBAQCB2b2lkIFByb3BlcnR5RGVzY3JpcHRvcjo6c2V0R2V0dGVyKEpTVmFsCiAgICAgbV9h
dHRyaWJ1dGVzICY9IH5SZWFkT25seTsKIH0KIAotLy8gU2VlIEVTNS4xIDkuMTIKLWJvb2wgc2Ft
ZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCi17Ci0gICAgaWYg
KCFhLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVj
LCBhLCBiKTsKLSAgICBpZiAoIWIuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGRvdWJsZSB4ID0gYS5hc051bWJlcigpOwotICAgIGRvdWJsZSB5ID0gYi5hc051bWJlcigp
OwotICAgIGJvb2wgeElzTmFOID0gc3RkOjppc25hbih4KTsKLSAgICBib29sIHlJc05hTiA9IHN0
ZDo6aXNuYW4oeSk7Ci0gICAgaWYgKHhJc05hTiB8fCB5SXNOYU4pCi0gICAgICAgIHJldHVybiB4
SXNOYU4gJiYgeUlzTmFOOwotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpID09
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeSk7Ci19Ci0KIGJvb2wgUHJvcGVydHlEZXNjcmlwdG9y
OjplcXVhbFRvKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAob3RoZXIubV92YWx1ZS5pc0VtcHR5KCkgIT0gbV92YWx1ZS5p
c0VtcHR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVz
Y3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
OSArMzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR2V0dGVyU2V0dGVyOwogCi0vLyBT
ZWUgRVM1LjEgOS4xMgotYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1
ZSk7Ci0KIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvciB7CiBwdWJsaWM6CiAgICAgUHJvcGVydHlE
ZXNjcmlwdG9yKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJh
dG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjAsNyArNjAsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIFNl
dEl0ZXJhdG9yCiAKICAgICBpZiAoaXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0
KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOwotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxG
cmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bQogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmFkZCwgc2V0UHJvdG9GdW5jQWRkLCBEb250RW51bSwgMSk7CiAgICAgSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xl
YXIsIHNldFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5D
VElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwg
c2V0UHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBzZXRQcm90b0Z1bmNI
YXMsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBzZXRQcm90b0Z1bmNIYXMsIERv
bnRFbnVtLCAxLCBKU1NldEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmll
c1B1YmxpY05hbWUoKSwgc2V0UHJvdG9GdW5jRW50cmllcywgRG9udEVudW0sIDApOwogCiAgICAg
SlNGdW5jdGlvbiogdmFsdWVzID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKS5z
dHJpbmcoKSwgc2V0UHJvdG9GdW5jVmFsdWVzKTsKQEAgLTE4Niw3ICsxODYsNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jCiAgICAgICAgIHJlc3VsdEFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCAwLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDYgKzY1LDcgQEAKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW5j
bHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKKyNpbmNs
dWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmgiCkBAIC0yNDksNiArMjUwLDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgd2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2VuZGlmCisgICAgaGFzaE1hcEJ1Y2tldFNl
dFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEJ1Y2tl
dE1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNo
TWFwSW1wbFNldFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIGhhc2hNYXBJbXBsTWFwU3RydWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKIAogICAgIGl0ZXJhdGlvblRlcm1pbmF0b3Iuc2V0KCp0
aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnRoaXMsIEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCksIDEpKSk7CiAgICAgbmF0aXZlU3RkRnVuY3Rpb25D
ZWxsU3RydWN0dXJlLnNldCgqdGhpcywgTmF0aXZlU3RkRnVuY3Rpb25DZWxsOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw2ICszMzEsMTAgQEAgcHVibGljOgogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFz
aE1hcEJ1Y2tldFNldFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFwQnVj
a2V0TWFwU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBJbXBsU2V0U3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBJbXBsTWFwU3RydWN0dXJlOwog
CiAgICAgU3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9uVGVybWluYXRvcjsKICAgICBTdHJvbmc8SlND
ZWxsPiBlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3I7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01hcEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01hcEJhc2UuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01hcEJhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfTWFwQmFz
ZV9oCisjZGVmaW5lIFdlYkNvcmVfRldEX01hcEJhc2VfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL01hcEJhc2UuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzY4LDcgKzEzNjgsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29k
ZSBDbG9uZVNlcmlhbGl6ZXI6CiAgICAgICAgICAgICBjYXNlIE1hcERhdGFTdGFydFZpc2l0RW50
cnk6IHsKICAgICAgICAgICAgICAgICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRvciA9IG1hcEl0ZXJh
dG9yU3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAg
ICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUoa2V5LCB2YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUobV9leGVjLCBrZXks
IHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxh
c3QoKTsKICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0
U3RhY2subGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxK
U01hcCo+KG9iamVjdCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287700</attachid>
            <date>2016-09-01 16:25:28 -0700</date>
            <delta_ts>2016-09-01 16:47:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>144793</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRl
ci5jcHAKKyAgICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmll
ci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVk
VHlwZS5jcHAKQEAgLTc1Miw2ICs3NTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIHJ1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0ZXJhbFBh
cnNlci5jcHAKICAgICBydW50aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJhc2UuY3Bw
CiAgICAgcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9y
UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAwLDEwICsxMzAwLDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcwMEM1QTgz
NCAvKiBKSVRNYXRoSUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9D
b2RlT3JpZ2luTWFwLmNwcCAqLzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBD
VG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVCMTk5
NzFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFz
ZS5jcHAgKi87IH07CisJCTc5NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhC
RTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2
ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAq
LzsgfTsKKwkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1
MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODMzMUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEy
MjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRN
YXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1
bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzUzMywxMCArMzUzNywxNCBAQAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0
aElDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJD
QjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dElu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdp
bk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGFzaE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEw
OTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyog
SklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
TWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NzQsNiAr
NTc4Miw4IEBACiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAq
LywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywK
IAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJ
NzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJCQk3OUEw
OTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNBMzQ5RDAz
OEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdD
NjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgz
RDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKQEAgLTU5ODIsNiArNTk5Miw4IEBACiAJCQkJ
QTdFMkVBNjkwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJCQlGNjky
QTg2ODAyNTU1OTdEMDFGRjYwRjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1
OTdEMDFGRjYwRjcgLyogTG9va3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEw
IC8qIE1hcEJhc2UuY3BwICovLAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBC
YXNlLmggKi8sCiAJCQkJQTcwMDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9y
LmNwcCAqLywKIAkJCQlBNzAwODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3Iu
aCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLApAQCAt
NzI3MSw2ICs3MjgzLDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxs
RnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBD
YWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgxRDc4QkUz
NTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3MUI4NEZC
NEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTc0MzcsNiArNzQ1MCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFB
QjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5
QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFw
aC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzEsNyBAQAogCQkJCTBGMDMzMkMwMThB
REZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZB
QTAwQ0Y2NTY0IC8qIEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdE
RkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTIwMSw2ICs5MjE2LDcgQEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJGRjJCMUFE
NDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlDQzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThE
Q0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAj
aW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzQ2LDYgKzM0OCwxMiBAQCBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBpZiAoY2xhc3NJbmZvID09IFJl
Z0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1JlZ0V4cE9iamVjdDsKKwor
ICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNN
YXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0OjppbmZvKCkpCisgICAgICAg
IHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xh
c3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MSArMzksNDMgQEAgY2xhc3Mg
U3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0ZWRUeXBlOwogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAgICAgPSAwOyAvLyBXZSBkb24n
dCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmlu
YWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9i
amVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQXJyYXkgICAgICAgICAgICAg
ID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0gMXUgPDwgMjsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
SW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDhB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUgPDwgNTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdSA8PCA2OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5ICA9IDF1IDw8
IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRz
IHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5
ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Vp
bnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MzJB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdSA8PCAxMTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXVsbCA8PCAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxsIDw8IDE7IC8vIEl0J3MgZGVm
aW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bmN0
aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlv
bi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0g
MXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MTZBcnJheSAg
ICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MTZBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0lu
dDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMy
QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXVsbCA8PCA3OyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJheSAgICAgICAgPSAx
dWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRz
IHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5
ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5IG9y
IG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
RmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8PCAxMTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJh
eSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNw
ZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8
IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8PCAxMjsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBT
dHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVj
dCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBSZWdFeHBPYmplY3QgKGFu
ZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8IDE2OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJheSwgb3IgSlNGdW5j
dGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0ICAgICAgICAgICAg
ID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwgU3BlY1R5cGVk
QXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1bWVudHMgfCBT
cGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8g
Qml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlv
bi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0g
MXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVu
dGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAg
ICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5v
dCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RB
cmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1
bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1
bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVu
dHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3Qg
ICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1bGwg
PDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5vdCBhbnkgc3Vi
Y2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
TWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQncyBkZWZpbml0ZWx5IE1hcCBv
YmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwgPDwgMTc7IC8vIEl0J3MgZGVm
aW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1bGwgPDwg
MTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBK
U0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNP
YmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVu
Y3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Nj
b3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3Bl
Y01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7IC8vIEJpdG1hc2sg
dXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDF1bGwgPDwg
MTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVy
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAgICAgPSAx
dWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFu
IGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZyAgICAg
ICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdWYXI7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTeW1ib2wg
ICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3ltYm9sLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAgICAgICAgPSAxdSA8PCAy
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09i
amVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRo
aXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1bGwgPDwgMjE7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2Vs
bE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxs
IGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0
cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10
b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAg
ICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNDZWxsT3Ro
ZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxsIDw8IDIzOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwgPDwgMjQ7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAgICAgPSBTcGVjQm9vbEludDMy
IHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyLgotc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdSA8PCAyMzsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQu
IEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8PCAyNTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBk
ZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
QW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNwZWNJbnQ1Mk9ubHk7IC8vIEl0
J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50IGFyaXRobWV0aWMgb24uCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFzRG91YmxlICAgICA9IDF1IDw8
IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91Ymxl
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAx
dSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1MiBidXQgaXQncyBhIHJlYWwg
bnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
SW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3OyAvLyBJdCdzIGRlZmluaXRl
bHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5kIGl0J3MgYSBkb3VibGUu
CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVJlYWwgICAgICAgICA9IFNw
ZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJs
ZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBp
cyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgTmFO
IHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxsIDw8IDI4OyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdWxsIDw8IDI5OyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUgdG8gdGFnIChpLmUuIGltcHVy
ZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZU5hTiAgICAgICAgICA9
IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5hTjsgLy8gSXQncyBkZWZpbml0
ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5
dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZVB1cmVOYU47IC8v
IEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUsIGJ1dCBpdCdzIGRlZmluaXRl
bHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxE
b3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZU5hTjsgLy8gSXQncyBl
aXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgxLDEyICs4MywxMiBAQCBzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRG91Ymxl
UmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGVSZWFsLCBvciBhIEludDUy
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJlciAgICAgPSBT
cGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQz
MiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGltcHVyZSBOYU4uCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IFNwZWNB
bnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIsIEludDUyLCBv
ciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICA9IDF1IDw8IDI4OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhl
ciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9v
bGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQm9vbGVh
bi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0g
MXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gU3Bl
Y0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFu
LCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0hl
YXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01p
c2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9u
bHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5vbi1PYmplY3QgSlNWYWx1ZS4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXUg
PDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMzI7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IFNwZWNIZWFwVG9wIHwgU3Bl
Y0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50
NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNwb25kcyB0byB3aGF0IGNvdWxk
IGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29kZVRvcCB8IFNwZWNGdWxsTnVt
YmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29kZSBjb3VsZCBzZWUgcGx1cyBl
eG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYgKzk3NywyMCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBC
dWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJc05v
bkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNK
U0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0yODgzLDcgKzI4OTcsNiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
CiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0
dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJl
c3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzogeworICAgICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5v
ZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNoLCBrZXkpOworICAg
ICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgRWRnZShtYXAsIE1h
cE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNoKSk7CisgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgT3BJbmZvKCksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBK
U1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFwSGFzSW50cmluc2ljOiB7CisgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKworICAgICAgICBOb2RlKiBtYXBPclNl
dCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwor
ICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwg
a2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50
cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOworICAgICAgICBOb2RlKiBidWNr
ZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJbmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1
c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0g
YWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBidWNrZXQpOworICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYgKzEyNDMsMjcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblRhaWw6CiAgICAg
ICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWFwSGFz
aDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBF
ZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBu
b2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEJ1Y2tldExvYywg
TWlzY0ZpZWxkcywgbWFwRWRnZSwga2V5RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgRWRnZSYgYnVja2V0RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwR2V0TG9jLCBNaXNjRmllbGRzLCBi
dWNrZXRFZGdlKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcFNldEhhc0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+
Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgIGNhc2UgTWFwSGFz
aDoKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6
CisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29w
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlz
dDsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDc7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0KCkgeyBy
ZXR1cm4gODsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9k
ZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cywgS2lsbFN0YXR1cyBr
aWxsU3RhdHVzKQogICAgIHsKQEAgLTE5Nyw4ICsxOTcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAg
dWludHB0cl90IHNoaWZ0ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIDw8
IHNoaWZ0KCk7CiAgICAgICAgIEFTU0VSVCgoc2hpZnRlZFZhbHVlID4+IHNoaWZ0KCkpID09IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0g
MCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwotICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDIpIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1
cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0
dXMpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0
VXNlS2luZCkgPDwgMikgPCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSwg
IldlIHJlbHkgb24gdGhpcyBiZWluZyB0cnVlIHRvIG5vdCBjbG9iYmVyIHRoZSBub2RlIHBvaW50
ZXIuIik7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBzaGlmdGVkVmFsdWUgfCAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0
dXMpIDw8IDEpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihERkc6OmlzUHJvdmVkKHByb29mU3Rh
dHVzKSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICB1bmlv
biBVIHsKKyAgICAgICAgICAgICAgICBVKCkgeyB3b3JkID0gMDsgfQorICAgICAgICAgICAgICAg
IHVpbnRwdHJfdCB3b3JkOworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZTsKKyAgICAgICAgICAg
IH0gdTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVkZ2UudXNlS2luZFVuY2hlY2tlZCgpID09IHVz
ZUtpbmQpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5ub2RlKCkgPT0gbm9kZSk7CisgICAg
ICAgICAgICBBU1NFUlQodS5lZGdlLnByb29mU3RhdHVzVW5jaGVja2VkKCkgPT0gcHJvb2ZTdGF0
dXMpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5raWxsU3RhdHVzVW5jaGVja2VkKCkgPT0g
a2lsbFN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ1LDYgKzE1NDUsMjkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBHZXRN
YXBCdWNrZXQ6CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1h
cE9iamVjdFVzZSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE1hcE9iamVjdFVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPFNldE9iamVjdFVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBmaXhFZGdlPFVudHlwZWRVc2U+
KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTG9hZEZyb21KU01h
cEJ1Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNr
ZXQ6CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNYXBIYXNoOgorICAgICAgICAgICAg
Zml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNl
cyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3Ig
bmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDUzMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Myw2ICsxNDMsMTUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIExvYwogICAgIGNhc2UgUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jOgogICAgICAg
ICBvdXQucHJpbnQoIlJlZ0V4cE9iamVjdExhc3RJbmRleExvYyIpOwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU01hcEJ1Y2tldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcEJ1Y2tl
dExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01hcEdldExvYzoKKyAgICAgICAg
b3V0LnByaW50KCJKU01hcEdldExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01h
cFNldEhhc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcFNldEhhc0xvYyIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5k
IHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAg
U3RhY2tMb2MsCi0gICAgU3RhY2tQYXlsb2FkTG9jCisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAg
IEpTTWFwQnVja2V0TG9jLAorICAgIEpTTWFwR2V0TG9jLAorICAgIEpTTWFwU2V0SGFzTG9jCiB9
OwogCiBjbGFzcyBIZWFwTG9jYXRpb24gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDE5LDYgKzE0MTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhw
OgogICAgICAgICBjYXNlIFRvTnVtYmVyOgorICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNr
ZXQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDcgKzM4OCwxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRv
clN0cnVjdHVyZVBuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVS
ZXN1bHRKUykgXAotICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKKyAgICBt
YWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICAvKiBIYXNoaW5nIG5vZGVz
IGZvciBKU01hcCBhbmQgSlNTZXQgKi8gXAorICAgIG1hY3JvKE1hcEhhc2gsIE5vZGVSZXN1bHRJ
bnQzMikgXAorICAgIG1hY3JvKEdldE1hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFj
cm8oTG9hZEZyb21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSXNOb25F
bXB0eU1hcEJ1Y2tldCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVy
YXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAv
LyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAo
YXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsOCBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNh
bEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU1NldC5oIgog
I2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2lu
Y2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtMTgwMyw2ICsxODA1LDM0IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmEKICAgICBzY29wZS0+bWV0aG9kVGFibGUo
KS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgc2xvdCk7
CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgaW5wdXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICByZXR1
cm4ganNNYXBIYXNoKGV4ZWMsIHZtLCBub3JtYWxpemVNYXBLZXkoSlNWYWx1ZTo6ZGVjb2RlKGlu
cHV0KSkpOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVj
a2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50
MzJfdCBoYXNoKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTTWFwOjpCdWNrZXRUeXBlKiogYnVj
a2V0ID0ganNDYXN0PEpTTWFwKj4obWFwKS0+ZmluZEJ1Y2tldChleGVjLCBKU1ZhbHVlOjpkZWNv
ZGUoa2V5KSwgaGFzaCk7CisgICAgaWYgKCFidWNrZXQpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiAqYnVja2V0OworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRK
U1ZhbHVlIGtleSwgaW50MzJfdCBoYXNoKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTU2V0OjpC
dWNrZXRUeXBlKiogYnVja2V0ID0ganNDYXN0PEpTU2V0Kj4obWFwKS0+ZmluZEJ1Y2tldChleGVj
LCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgaGFzaCk7CisgICAgaWYgKCFidWNrZXQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiAqYnVja2V0OworfQorCiBleHRlcm4gIkMiIHZv
aWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJh
YmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291
bGRuJ3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0MiwxMCBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiBKU1N0cmluZyogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJf
dCk7CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGlucHV0KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25K
U01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVj
U3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CisKIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJpbmcq
LCBTdHJ1Y3R1cmUqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09u
Q2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcx
MSw2ICs3MTEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJp
YWJsZToKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEZyb21B
cmd1bWVudHM6CisgICAgICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgY2Fz
ZSBUb051bWJlcjogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtX2N1cnJlbnROb2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzQxLDYgKzc0Miwx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBj
YXNlIE1hcEhhc2g6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgR2V0UmVz
dExlbmd0aDogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9i
amVjdFVzZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgTWFw
T2JqZWN0VXNlOgorICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKICAgICAgICAgY2FzZSBPYmpl
Y3RPck90aGVyVXNlOgogICAgICAgICBjYXNlIFN0cmluZ0lkZW50VXNlOgogICAgICAgICBjYXNl
IFN0cmluZ1VzZToKQEAgLTM1NSw2ICszNTcsMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoKICAgICBjYXNlIFB1dER5
bmFtaWNWYXI6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6CisgICAgY2FzZSBNYXBIYXNoOgorICAg
IGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICBj
YXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2Fz
ZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgi
CisjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3Jk
LmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCIKQEAgLTQ3MjAsNiArNDcyMSw4MiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgTWFwSGFzaDogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBpbnB1dCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgaW5wdXRSZWdzID0gaW5wdXQuanNW
YWx1ZVJlZ3MoKTsKKworICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCBy
ZXN1bHRHUFIsIGlucHV0UmVncyk7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Cisg
ICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGtl
eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBo
YXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQg
cmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIGtleVJlZ3MgPSBrZXkuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BS
UmVnIGhhc2hHUFIgPSBoYXNoLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFw
T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KG5vZGUtPmNoaWxkMSgp
LCBtYXBHUFIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
U2V0T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KG5vZGUtPmNoaWxk
MSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBr
ZXlSZWdzLCBoYXNoR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlSZWdzLCBo
YXNoR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYnVj
a2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOworCisgICAgICAgIGF1dG8gbm90QnVja2V0ID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYnVja2V0R1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwg
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZWYWx1ZSgp
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSk7CisgICAgICAg
IGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RCdWNrZXQubGluaygmbV9q
aXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNr
ZXRHUFIgPSBidWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBib29s
ZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAg
IGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDkgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29yZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmly
b25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCIKKyNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdp
c3RlcnNNb2RlLmgiCkBAIC00NjE1LDYgKzQ2MTcsMTY4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBN
YXBIYXNoOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc3RyYWlnaHRIYXNoOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9u
ZTsKKyAgICAgICAgYXV0byBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAg
IHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTU3RyaW5nOjpvZmZzZXRP
ZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cmluZ0ltcGw6
OmZsYWdzT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC51cnNoaWZ0NjQoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0
R1BSKSk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5i
cmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUikpOworICAgICAgICBzdHJhaWdodEhhc2guYXBwZW5k
KG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MoaW5wdXRHUFIpKSk7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIHN0cmFpZ2h0SGFzaC5saW5r
KCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIG1faml0LmpzTWFwSGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIGlucHV0R1BSKTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBpbnQzMlJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
ZXRNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgbWFzayh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IGluZGV4KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgYnVmZmVyKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3JhcnkgYnVja2V0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBoYXNoR1BSID0gaGFzaC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1hc2tH
UFIgPSBtYXNrLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGJ1ZmZlckdQUiA9IGJ1ZmZlci5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGtleUdQUiA9IGtleS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU1hcE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1hcEdQUiwgbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSA/IEpTTWFwOjpvZmZzZXRPZkhhc2hN
YXBJbXBsKCkgOiBKU1NldDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpKSwgYnVmZmVyR1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkNh
cGFjaXR5KCkpLCBtYXNrR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWFza0dQUik7CisgICAgICAgIG1faml0Lm1vdmUo
aGFzaEdQUiwgaW5kZXhHUFIpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29w
ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aENhc2VzOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbG9vcEFyb3VuZDsKKworICAgICAgICBtX2ppdC5h
bmQzMihtYXNrR1BSLCBpbmRleEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChidWZmZXJHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCksIGJ1Y2tldEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoYnVja2V0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICBhdXRvIG5vdFByZXNlbnRJblRhYmxlID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBidWNrZXRHUFIsIFRydXN0ZWRJ
bW1QdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpl
bXB0eVZhbHVlKCkpKTsKKyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBidWNrZXRHUFIsIFRydXN0ZWRJ
bW1QdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpk
ZWxldGVkVmFsdWUoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6
b2Zmc2V0T2ZLZXkoKSksIGJ1Y2tldEdQUik7CisKKyAgICAgICAgLy8gUGVyZm9ybSBPYmplY3Qu
aXMoKQorICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIGJ1Y2tldEdQUiwga2V5R1BSKSk7IC8vIFRoZXkncmUgZGVmaW5pdGVseSB0aGUgc2Ft
ZSB2YWx1ZSwgd2UgZm91bmQgdGhlIGJ1Y2tldCB3ZSB3ZXJlIGxvb2tpbmcgZm9yIQorICAgICAg
ICBhdXRvIG9uZUlzbnRDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGJ1
Y2tldEdQUikpOworICAgICAgICAvLyBmaXJzdCBpcyBhIGNlbGwgaGVyZS4KKyAgICAgICAgbG9v
cEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGtleUdQUikp
KTsKKyAgICAgICAgLy8gQm90aCBhcmUgY2VsbHMgaGVyZS4KKyAgICAgICAgbG9vcEFyb3VuZC5h
cHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBK
SVRDb21waWxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhlIGZpcnN0IGlz
IGEgc3RyaW5nIGhlcmUuCisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDgoSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
a2V5R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmlu
Z1R5cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZywgYnV0IHRoZSBzZWNv
bmQgaXMgbm90LCB3ZSBjb250aW51ZSB0byBsb29wIGFyb3VuZC4KKyAgICAgICAgbG9vcEFyb3Vu
ZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBvbmVJc250Q2VsbC5saW5rKCZtX2pp
dCk7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZG9uZSBhIDY0LWJpdCBjb21wYXJlIGF0IHRo
aXMgcG9pbnQsIHNvIGlmIG9uZSBpcyBub3QgYSBudW1iZXIsIHRoZXkncmUgZGVmaW5pdGVseSBu
b3QgZXF1YWwuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVt
YmVyKGJ1Y2tldEdQUikpOworICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdE51bWJlcihrZXlHUFIpKTsKKyAgICAgICAgLy8gQm90aCBhcmUgZGVmaW5pdGVseSBudW1i
ZXJzLiBJZiB3ZSBzZWUgYSBkb3VibGUsIHdlIGdvIHRvIHRoZSBzbG93IHBhdGguCisgICAgICAg
IHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIoYnVja2V0R1BSKSk7
CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIoa2V5
R1BSKSk7CisgICAgICAgIAorICAgICAgICBsb29wQXJvdW5kLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUik7CisgICAgICAgIG1faml0
Lmp1bXAoKS5saW5rVG8obG9vcCwgJm1faml0KTsKKworICAgICAgICBzbG93UGF0aENhc2VzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoaW5kZXhHUFIpOwor
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRH
UFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BS
LCBrZXlHUFIsIGhhc2hHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGluZGV4
R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RQcmVzZW50SW5UYWJsZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdEJ1Y2tldCA9IG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQUik7CisgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFsdWUoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RC
dWNrZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgSXNPYmplY3Q6IHsK
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczODEsNiArNzM4MSwzNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGVSZWdFeHBPYmplCiAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KGVk
Z2UsIG9wZXJhbmQuZ3ByKCkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVN
YXBPYmplY3QoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCkKK3sKKyAgICBzcGVjdWxhdGVDZWxsVHlw
ZShlZGdlLCBjZWxsLCBTcGVjTWFwT2JqZWN0LCBKU01hcFR5cGUpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY01hcE9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgc3BlY3VsYXRl
TWFwT2JqZWN0KGVkZ2UsIG9wZXJhbmQuZ3ByKCkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCkKK3sKKyAgICBzcGVj
dWxhdGVDZWxsVHlwZShlZGdlLCBjZWxsLCBTcGVjU2V0T2JqZWN0LCBKU1NldFR5cGUpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlKQorewor
ICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1NldE9iamVjdCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7Cisg
ICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UsIG9wZXJhbmQuZ3ByKCkpOworfQorCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UgZWRnZSkKIHsKICAgICBp
ZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpKQpAQCAtNzY2
OCw2ICs3Njk2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQK
ICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0
KGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAg
c3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldE9i
amVjdFVzZToKKyAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MywxNCArOTMsMTQgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9y
LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW51bSBTcGlsbE9yZGVyIHsKLSAgICAgICAgU3Bp
bGxPcmRlckNvbnN0YW50ID0gMSwgLy8gbm8gc3BpbGwsIGFuZCBjaGVhcCBmaWxsCi0gICAgICAg
IFNwaWxsT3JkZXJTcGlsbGVkICA9IDIsIC8vIG5vIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJK
UyAgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJDZWxsICAgICA9
IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJTdG9yYWdlICA9IDQsIC8vIG5l
ZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICA9IDUsIC8vIG5lZWRzIHNwaWxs
IGFuZCBib3gKLSAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4gID0gNSwgLy8gbmVlZHMgc3BpbGwg
YW5kIGJveAotICAgICAgICBTcGlsbE9yZGVyRG91YmxlICAgPSA2LCAvLyBuZWVkcyBzcGlsbCBh
bmQgY29udmVydAorICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQgID0gMSwgLy8gbm8gc3BpbGws
IGFuZCBjaGVhcCBmaWxsCisgICAgICAgIFNwaWxsT3JkZXJTcGlsbGVkICAgPSAyLCAvLyBubyBz
cGlsbAorICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAg
ICAgICAgU3BpbGxPcmRlckNlbGwgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCisgICAgICAgIFNw
aWxsT3JkZXJTdG9yYWdlICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVy
SW50ZWdlciAgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAgICAgICBTcGlsbE9yZGVy
Qm9vbGVhbiAgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAgICAgICBTcGlsbE9yZGVy
RG91YmxlICAgID0gNiwgLy8gbmVlZHMgc3BpbGwgYW5kIGNvbnZlcnQKICAgICB9OwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBlbnVtIFNwaWxsT3JkZXIgewpAQCAtNTE5LDcgKzUxOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3BlY2lhbCwgc2luY2UgaXQncyBu
b3QgYSBKUyB2YWx1ZSAtIGFzIGluIGl0J3Mgbm90IHZpc2libGUgdG8gSlMKICAgICAgICAgICAg
IC8vIGNvZGUuCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihpbmZvLmdwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0
cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAgICAgaW5mby5zcGls
bCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCkBAIC0xMjkxLDYgKzEyOTEsMTIgQEAgcHVibGljOgogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVy
YXRpb25fRUNKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFs
dWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3Rl
ZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMS5ncHIoKSwgYXJnMi5ncHIoKSwgbWF0aElDKTsKQEAgLTE2NzEsNiArMTY3
NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAg
ICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlv
bl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIsIHVuc2lnbmVk
IGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpLCBUcnVzdGVkSW1tMzIoYXJnMykpOwpAQCAtMTcxOSw2
ICsxNzMxLDE4IEBAIHB1YmxpYzoKICAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQog
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0pa
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIs
IEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBhcmczKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAg
IH0KKworICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25f
RUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlf
QVJHIGFyZzEucGF5bG9hZEdQUigpLCBhcmcxLnRhZ0dQUigpKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljIG9wZXJhdGlv
biwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcy
LCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwg
YXJnMS50YWdHUFIoKSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCksIG1hdGhJQyk7
CkBAIC0yNjU2LDYgKzI2ODAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlRmluYWxP
YmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVSZWdFeHBPYmplY3QoRWRnZSwgR1BSUmVn
IGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KEVkZ2UpOworICAgIHZvaWQg
c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVk
Z2UsIEdQUlJlZyBjZWxsKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlKTsKKyAg
ICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVk
Z2UgZWRnZSwgR1BSUmVnIGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRM
b2FkU3RvcmFnZShFZGdlIGVkZ2UsIEdQUlJlZyBzdHJpbmcsIEdQUlJlZyBzdG9yYWdlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsNiArOTQsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFVzZQogICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQo
IlJlZ0V4cE9iamVjdCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYXBPYmplY3RVc2U6
CisgICAgICAgIG91dC5wcmludCgiTWFwT2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJTZXRPYmplY3RVc2UiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgb3V0
LnByaW50KCJPYmplY3RPck90aGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsOCBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtub3duU3RyaW5nVXNlLAogICAgIEtub3duUHJp
bWl0aXZlVXNlLCAvLyBUaGlzIGJpemFycmUgdHlwZSBhcmlzZXMgZm9yIG9wX3N0cmNhdCwgd2hp
Y2ggaGFzIGEgYnl0ZWNvZGUgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBvbmx5IHNlZSBwcmltaXRp
dmVzIChpLmUuIG5vdCBvYmplY3RzKS4KICAgICBTeW1ib2xVc2UsCisgICAgTWFwT2JqZWN0VXNl
LAorICAgIFNldE9iamVjdFVzZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAgU3RyaW5nT3JT
dHJpbmdPYmplY3RVc2UsCiAgICAgTm90U3RyaW5nVmFyVXNlLApAQCAtMTM0LDYgKzEzNiwxMCBA
QCBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgICAgIHJldHVy
biBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0OwogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgICAg
ICByZXR1cm4gU3BlY1N5bWJvbDsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgcmV0
dXJuIFNwZWNNYXBPYmplY3Q7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHJldHVy
biBTcGVjU2V0T2JqZWN0OwogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICByZXR1
cm4gU3BlY1N0cmluZ09iamVjdDsKICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgpA
QCAtMjIxLDYgKzIyNyw4IEBAIGlubGluZSBib29sIGlzQ2VsbChVc2VLaW5kIGtpbmQpCiAgICAg
Y2FzZSBTeW1ib2xVc2U6CiAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgY2FzZSBTdHJp
bmdPclN0cmluZ09iamVjdFVzZToKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICBjYXNlIFNl
dE9iamVjdFVzZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5j
bHVkZSAiRlRMQWJzdHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5j
bHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU1NldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKQEAgLTEwMiw3ICsxMDQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3Byb3Rv
dHlwZSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVy
ZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQorICAgIG1hY3Jv
KFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBc
CisgICAgbWFjcm8oSlNNYXBfaGFzaE1hcEltcGwsIEpTTWFwOjpvZmZzZXRPZkhhc2hNYXBJbXBs
KCkpIFwKKyAgICBtYWNybyhKU1NldF9oYXNoTWFwSW1wbCwgSlNTZXQ6Om9mZnNldE9mSGFzaE1h
cEltcGwoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBJbXBsX2NhcGFjaXR5LCBIYXNoTWFwSW1wbDxI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQ2FwYWNpdHkoKSkg
XAorICAgIG1hY3JvKEhhc2hNYXBJbXBsX2J1ZmZlciwgIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSkgXAorICAgIG1hY3Jv
KEhhc2hNYXBCdWNrZXRfdmFsdWUsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT46Om9mZnNldE9mVmFsdWUoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNrZXRfa2V5LCBI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpKSBc
CiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAg
bWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw2ICsxODAsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICBjYXNlIFVucmVhY2hh
YmxlOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgTWFwSGFzaDoKKyAgICBjYXNlIEdl
dE1hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05v
bkVtcHR5TWFwQnVja2V0OgogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVk
OgogICAgIGNhc2UgSXNCb29sZWFuOgpAQCAtNDM3LDYgKzQ0MSw4IEBAIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09i
amVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgog
ICAgICAgICAgICAgICAgIGNhc2UgU3ltYm9sVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWFw
T2JqZWN0VXNlOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWdFeHBP
YmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1l
bnRzVGFibGUuaCIKQEAgLTg5OCw2ICs4OTksMTggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJ
c0pTQXJyYXk6CiAgICAgICAgICAgICBjb21waWxlSXNKU0FycmF5KCk7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNYXBIYXNoOgorICAgICAgICAgICAgY29tcGlsZU1hcEhhc2go
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlTG9hZEZyb21K
U01hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0
eU1hcEJ1Y2tldDoKKyAgICAgICAgICAgIGNvbXBpbGVJc05vbkVtcHR5TWFwQnVja2V0KCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgICAgIGNv
bXBpbGVJc09iamVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MzUxLDYgKzYzNjQsMjI4
IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxs
UmVzdWx0LCBjZWxsUmVzdWx0KSk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlTWFwSGFzaCgp
CisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBzdHJhaWdodEhhc2ggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBpc051bWJlckNhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBpc1N0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBu
b25FbXB0eVN0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgp
KSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGwpKTsKKworICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2Fz
ZSk7CisgICAgICAgIExWYWx1ZSBpc1N0cmluZyA9IG1fb3V0LmVxdWFsKG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLCBtX291dC5jb25zdElu
dDMyKFN0cmluZ1R5cGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNT
dHJpbmcsIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBub25FbXB0eVN0cmluZ0Nhc2UpOwor
ICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMu
SlNTdHJpbmdfdmFsdWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291
dC5lcXVhbChzdHJpbmdJbXBsLCBtX291dC5jb25zdEludFB0cigwKSksIHJhcmVseShzbG93Q2Fz
ZSksIHVzdWFsbHkobm9uRW1wdHlTdHJpbmdDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm9uRW1wdHlTdHJpbmdDYXNlLCBub3RDZWxsKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBt
X291dC5sU2hyKG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFz
aEFuZEZsYWdzKSwgbV9vdXQuY29uc3RJbnQzMig2KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2gsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAorICAg
ICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsLCBpc051bWJlckNhc2UpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc051bWJlcih2YWx1ZSksIHVuc3VyZShpc051bWJlckNh
c2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNO
dW1iZXJDYXNlLCBzdHJhaWdodEhhc2gpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBpc0ludDMyKHZhbHVlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCksIHVuc3VyZShzbG93Q2Fz
ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmFpZ2h0SGFzaCwgc2xvd0Nhc2UpOwor
ICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgICAgICBMVmFsdWUga2V5ID0gdmFs
dWU7CisgICAgICAgIExWYWx1ZSB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hs
KHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzIpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5v
dCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8v
IGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9
IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigyMikpOworICAgICAgICBrZXkgPSBt
X291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDEzKTsK
KyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291
dC5jb25zdEludDMyKDEzKSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7Cisg
ICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtl
eSA+PiA4KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIo
dGVtcCwgbV9vdXQuY29uc3RJbnQzMig4KSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihr
ZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICAgICAgdGVtcCA9
IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMp
KTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBe
PSAoa2V5ID4+IDE1KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0
LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxNSkpOworICAgICAgICBrZXkgPSBtX291dC5i
aXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICAg
ICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25z
dEludDMyKDI3KSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAg
IGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAz
MSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAs
IG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwg
dGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmNhc3RUb0ludDMyKGtleSk7CisKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihrZXkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3IoCisgICAgICAgICAgICB2bUNhbGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25NYXBIYXNoKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKEludDMyLCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0LCBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGNvbXBpbGVHZXRNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgCisgICAgICAgIExCYXNp
Y0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGxvb3BBcm91bmQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFByZXNlbnRJ
blRhYmxlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1wdHlW
YWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdERlbGV0ZWRW
YWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJpdEVxdWFs
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5Tm90Q2Vs
bCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzQ2Vs
bCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVDZWxscyA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzU3RyaW5n
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNOdW1i
ZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJlTnVtYmVy
cyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzSW50
MzIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1ZSBtYXA7CisgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBt
YXAgPSBsb3dNYXBPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UgaWYgKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgIG1h
cCA9IGxvd1NldE9iamVjdChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBMVmFsdWUga2V5
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBMVmFsdWUgaGFzaE1hcEltcGwg
PSBtX291dC5sb2FkUHRyKG1hcCwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2Jq
ZWN0VXNlID8gbV9oZWFwcy5KU01hcF9oYXNoTWFwSW1wbCA6IG1faGVhcHMuSlNTZXRfaGFzaE1h
cEltcGwpOworICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9hZFB0cihoYXNoTWFwSW1w
bCwgbV9oZWFwcy5IYXNoTWFwSW1wbF9idWZmZXIpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1f
b3V0LnN1YihtX291dC5sb2FkMzIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfY2Fw
YWNpdHkpLCBtX291dC5pbnQzMk9uZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhT
dGFydCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0
YXJ0LCBub3RFbXB0eVZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHVubWFza2VkSW5kZXggPSBtX291
dC5waGkoSW50MzIsIGluZGV4U3RhcnQpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5i
aXRBbmQobWFzaywgdW5tYXNrZWRJbmRleCk7CisgICAgICAgIExWYWx1ZSBoYXNoTWFwQnVja2V0
ID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlO
dW1iZXIoKSwgYnVmZmVyLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQp
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhh
c2hNYXBCdWNrZXQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoaGFzaE1hcEJ1
Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleT4+OjplbXB0eVZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShub3RQ
cmVzZW50SW5UYWJsZSksIHVuc3VyZShub3RFbXB0eVZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8obm90RW1wdHlWYWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hN
YXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVl
KCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKG5vdERlbGV0ZWRW
YWx1ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERlbGV0ZWRWYWx1ZSwgbm90Qml0
RXF1YWwpOworICAgICAgICBMVmFsdWUgYnVja2V0S2V5ID0gbV9vdXQubG9hZDY0KGhhc2hNYXBC
dWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF9rZXkpOworICAgICAgICAvLyBQZXJmb3JtIE9i
amVjdC5pcygpCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtl
eSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEJpdEVxdWFs
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWwsIGJ1Y2tldEtleUlzQ2Vs
bCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYnVja2V0S2V5KSwKKyAgICAgICAgICAg
IHVuc3VyZShidWNrZXRLZXlJc0NlbGwpLCB1bnN1cmUoYnVja2V0S2V5Tm90Q2VsbCkpOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwgYm90aEFyZUNlbGxzKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChrZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJvdGhB
cmVDZWxscyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Ym90aEFyZUNlbGxzLCBidWNrZXRLZXlJc1N0cmluZyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChp
c1N0cmluZyhidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzU3RyaW5n
KSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRL
ZXlJc1N0cmluZywgYnVja2V0S2V5Tm90Q2VsbCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0
cmluZyhrZXkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91
bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlOb3RDZWxsLCBidWNrZXRL
ZXlJc051bWJlcik7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihidWNrZXRLZXkp
LAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUoYnVja2V0S2V5SXNOdW1i
ZXIpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc051bWJlciwgYm90aEFy
ZU51bWJlcnMpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1iZXIoa2V5KSwKKyAgICAg
ICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKGJvdGhBcmVOdW1iZXJzKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYm90aEFyZU51bWJlcnMsIGJ1Y2tldEtleUlzSW50MzIpOwor
ICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihidWNrZXRLZXkpLAorICAgICAgICAgICAg
dW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGJ1Y2tldEtleUlzSW50MzIpKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0ludDMyLCBsb29wQXJvdW5kKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKGlzTm90SW50MzIoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcEFyb3Vu
ZCwgc2xvd1BhdGgpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHVubWFza2VkSW5k
ZXgsIG1fb3V0LmFuY2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSkpOworICAg
ICAgICBtX291dC5qdW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIG5vdFByZXNlbnRJblRhYmxlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Bh
dGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksCisgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24obV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0
VXNlID8gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0IDogb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0
KSwgbV9jYWxsRnJhbWUsIG1hcCwga2V5LCBoYXNoKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RQcmVzZW50SW5UYWJsZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90UHJlc2VudFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBi
dWNrZXRSZXN1bHQsIHNsb3dQYXRoUmVzdWx0LCBub3RQcmVzZW50UmVzdWx0KSk7CisgICAgfQor
CisgICAgdm9pZCBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBM
VmFsdWUgbWFwQnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGhhc0J1Y2tldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbm9CdWNrZXRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKworICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuZXF1YWwobWFwQnVja2V0LCBtX291dC5jb25zdEludFB0cigwKSksCisgICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGhhc0J1Y2tldCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaGFzQnVja2V0LCBjb250aW51
YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBidWNrZXRSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQubG9hZDY0KG1hcEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0X3ZhbHVlKSk7
CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkoSW50NjQsIG5vQnVja2V0UmVzdWx0LCBidWNrZXRSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGNvbXBpbGVJc05vbkVtcHR5TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBi
dWNrZXQgPSBsb3dNYXBCdWNrZXQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5ub3RFcXVhbChidWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUlzT2Jq
ZWN0T3JOdWxsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC05
OTI4LDYgKzEwMTYzLDIwIEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVj
dChlZGdlLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExW
YWx1ZSBsb3dNYXBPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIExWYWx1ZSBsb3dTZXRP
YmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwo
ZWRnZSk7CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCByZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICBMVmFsdWUgbG93U3RyaW5nKEVkZ2Ug
ZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQogICAgIHsKQEAgLTEwMDUxLDYgKzEwMzAwLDE3IEBAIHByaXZhdGU6CiAgICAgICAg
IHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQorCisgICAgTFZhbHVlIGxvd01hcEJ1Y2tldChFZGdlIGVkZ2UpCisgICAgeworICAg
ICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9tYXBCdWNrZXRWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2Vs
bChlZGdlKTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIHN0cmljdEludDUyVG9J
bnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0xMDM1NCw2ICsxMDYxNCwx
MiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgICAg
IHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFN0cmluZ1VzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA2ODIsNiArMTA5NDgsMjggQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsK
ICAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBj
ZWxsKQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVl
VmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNNYXBPYmplY3QsIGlzTm90VHlwZShjZWxsLCBKU01hcFR5
cGUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2Vs
bCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZh
bHVlKGNlbGwpLCBlZGdlLCBTcGVjU2V0T2JqZWN0LCBpc05vdFR5cGUoY2VsbCwgSlNTZXRUeXBl
KSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAg
IH0KICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIExWYWx1ZSBjZWxs
KQogICAgIHsKQEAgLTExNDUwLDYgKzExNzM4LDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBtX3N0b3JhZ2VWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7CiAgICAgfQorICAgIHZvaWQgc2V0TWFwQnVja2V0KE5vZGUqIG5vZGUsIExWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fbWFwQnVja2V0VmFsdWVzLnNldChub2RlLCBMb3dl
cmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KICAgICB2b2lkIHNldERv
dWJsZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBtX2RvdWJsZVZh
bHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKQEAg
LTExNDgzLDYgKzExNzc1LDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXRTdG9yYWdl
KG1fbm9kZSwgdmFsdWUpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChMVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBzZXRNYXBCdWNrZXQobV9ub2RlLCB2YWx1ZSk7CisgICAgfQog
ICAgIHZvaWQgc2V0RG91YmxlKExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldERvdWJs
ZShtX25vZGUsIHZhbHVlKTsKQEAgLTExNjY2LDYgKzExOTYyLDcgQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAgSGFz
aE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hN
YXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFw
PE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX21hcEJ1Y2tldFZhbHVlczsKICAgICBIYXNoTWFw
PE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKICAgICAKICAgICAvLyBU
aGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJldmVudHMgQjMgZnJvbSBoYXZpbmcgdG8gZG8g
Q1NFIG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MjYsNiArNjI2LDUyIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxD
YWwKICAgICAgICAgfSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmpzTWFwSGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKQor
eworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+KGtl
eSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2Ny
YXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlucHV0
LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7Cisg
ICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7Cisg
ICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEzKSwg
c2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQp
OworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOwor
ICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0
Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0LCBz
Y3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAgIGFk
ZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92
ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwg
MjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gs
IGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwgc2Ny
YXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAgIHhv
cjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1
bHQpCisgICAgdm9pZCogbWFzayA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihVSU5UX01BWCkpOworICAgIGFuZDY0KFRydXN0ZWRJbW1QdHIobWFzayksIGlucHV0
QW5kUmVzdWx0KTsKK30KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDYgKzYxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAgICAgfQogICAgIH0KKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgdm9pZCBqc01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVz
dWx0LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5kaWYKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92
bTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNiArMTk0LDcgQEAgdHlwZWRlZiBKU0NlbGwqIChK
SVRfT1BFUkFUSU9OICpDX0pJVE9wZQogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FU3RaWikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCwgaW50
MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAq
Q19KSVRPcGVyYXRpb25fRUpzY0kpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBVbmlxdWVkU3RyaW5n
SW1wbCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9F
Q0paKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0eXBl
ZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5
cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9HKShKU0dsb2JhbE9i
amVjdCopOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0RE
KShkb3VibGUsIGRvdWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01v
ZHVsZUFuYWx5emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL01vZHVsZUFuYWx5emVyLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIE1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFs
eXplcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFy
ZWRWYXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMp
CiAgICAgOiBtX3ZtKCZleGVjLT52bSgpKQotICAgICwgbV9tb2R1bGVSZWNvcmQoZXhlYy0+dm0o
KSwgSlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUs
IGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKKyAgICAsIG1fbW9kdWxlUmVj
b3JkKGV4ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgZXhlYy0+dm0oKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9k
dWxlS2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisKKyNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPD4KK2NvbnN0IENs
YXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZvID0KKyAg
ICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsKK3RlbXBsYXRlPD4KK2NvbnN0IENs
YXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8g
PQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBEYXRhPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tl
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9uZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2
KTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgPT0gMCwgIldlIGFzc3VtZSB0aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gbWVtYmVycyBvbmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+
bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwor
fQorCit0ZW1wbGF0ZTw+Citjb25zdCBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBJbXBsIiwg
bnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4pIH07Cit0ZW1wbGF0ZTw+Citjb25zdCBDbGFzc0luZm8g
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnNf
aW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3ZvaWQgSGFzaE1hcElt
cGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNo
TWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faGVhZCk7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2aXNpdG9yLmNvcHlMYXRlcih0
aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fYnVmZmVy
LmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygpKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+
Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENv
cHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0
b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hN
YXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tl
biAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgp
KSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogb2xkQnVmZmVyID0gdGhpc09iamVjdC0+
bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplSW5CeXRlcyA9IHRoaXNP
YmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBu
ZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyVHlwZSo+KHZpc2l0b3IuYWxsb2Nh
dGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOworICAgICAgICBtZW1jcHkobmV3QnVmZmVy
LCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9i
dWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVyKTsKKyAgICAgICAgdmlzaXRvci5kaWRD
b3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0cnVjdCBIYXNoTWFwQnVja2V0RGF0YUtleSB7CisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+IGtleTsKK307CisKK3N0cnVjdCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
IHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiB2YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgorY2xhc3MgSGFzaE1h
cEJ1Y2tldCA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleT46OnZhbHVlLCBT
dHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVl
LCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCitw
dWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0KiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAg
SGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1h
cEJ1Y2tldD4odm0uaGVhcCkpIEhhc2hNYXBCdWNrZXQodm0sIHNlbGVjdFN0cnVjdHVyZSh2bSkp
OworICAgICAgICBidWNrZXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWJ1Y2tldC0+bmV4dCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWJ1Y2tldC0+
cHJldigpKTsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisKKyAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOworCisgICAgSGFzaE1hcEJ1Y2tldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7IH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXROZXh0KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAg
IHsKKyAgICAgICAgbV9uZXh0LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldFByZXYoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisg
ICAgeworICAgICAgICBtX3ByZXYuc2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRLZXkoVk0mIHZtLCBKU1ZhbHVlIGtleSkKKyAgICB7Cisg
ICAgICAgIG1fZGF0YS5rZXkuc2V0KHZtLCB0aGlzLCBrZXkpOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFs
dWU+Ojp0eXBlIHNldFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IG1fZGF0YS52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6dmFsdWU+Ojp0eXBl
IHNldFZhbHVlKFZNJiwgSlNWYWx1ZSkgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
a2V5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmtleS5nZXQoKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZSwg
SlNWYWx1ZT46OnR5cGUgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0
YS52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQq
IG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVk
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldERlbGV0ZWQoYm9vbCBkZWxldGVkKSB7IG1f
ZGVsZXRlZCA9IGRlbGV0ZWQ7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZLZXko
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBt
X2RhdGEpICsgT0JKRUNUX09GRlNFVE9GKERhdGEsIGtleSk7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlLCBwdHJk
aWZmX3Q+Ojp0eXBlIG9mZnNldE9mVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBtX2RhdGEpICsgT0JKRUNUX09GRlNFVE9GKERhdGEs
IHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0YSBtX2RhdGE7CisgICAgV3JpdGVC
YXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1fbmV4dDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1
Y2tldD4gbV9wcmV2OworICAgIGJvb2wgbV9kZWxldGVkIHsgZmFsc2UgfTsKKworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJ1Y2tldFR5cGU+CitjbGFzcyBIYXNoTWFwQnVmZmVyIHsKK3B1Ymxp
YzoKKyAgICBIYXNoTWFwQnVmZmVyKCkgPSBkZWxldGU7CisKKyAgICBzdGF0aWMgc2l6ZV90IGFs
bG9jYXRpb25TaXplKHVpbnQzMl90IGNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNh
cGFjaXR5ICogc2l6ZW9mKEJ1Y2tldFR5cGUqKTsKKyAgICB9CisKKyAgICBCdWNrZXRUeXBlKiog
YnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QnVja2V0
VHlwZSoqPih0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1ZmZlciogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1aW50MzJfdCBjYXBhY2l0
eSkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlv
blNpemUoY2FwYWNpdHkpOworICAgICAgICB2b2lkKiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlcih2bS5oZWFwKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShvd25lciwgYWxsb2NhdGlvblNpemUsICZkYXRhKSkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1ZmZlciogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlcio+KGRhdGEpOworICAgICAgICBtZW1zZXQoYnVm
ZmVyLCAtMSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0K
KworfTsKKworQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBhcmVLZXlzRXF1YWwoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICAvLyBXZSB3YW50ICswIGFuZCAt
MCB0byBiZSBjb21wYXJlZCB0byB0cnVlIGhlcmUuIHNhbWVWYWx1ZSgpIGl0c2VsZiBkb2Vzbid0
CisgICAgLy8gZ3VhcmFudGVlIHRoYXQsIGhvd2V2ZXIsIHdlIG5vcm1hbGl6ZSBhbGwga2V5cyBi
ZWZvcmUgY29tcGFyaW5nIGFuZCBzdG9yaW5nCisgICAgLy8gdGhlbSBpbiB0aGUgbWFwLiBUaGUg
bm9ybWFsaXphdGlvbiB3aWxsIGNvbnZlcnQgLTAuMCBhbmQgMC4wIHRvIHRoZSBpbnRlZ2VyCisg
ICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIDAuCisgICAgcmV0dXJuIHNhbWVWYWx1ZShleGVjLCBh
LCBiKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVl
IGtleSkKK3sKKyAgICBpZiAoIWtleS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4ga2V5Owor
CisgICAgaWYgKGtleS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBkb3Vi
bGUgZCA9IGtleS5hc0RvdWJsZSgpOworICAgIGlmIChzdGQ6OmlzbmFuKGQpKQorICAgICAgICBy
ZXR1cm4ga2V5OworCisgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgIGlmIChp
ID09IGQpIHsKKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyAtMCwgd2UgY29udmVydCBpdCB0byBw
b3NpdGl2ZSB6ZXJvLgorICAgICAgICAvLyBXaGVuIGEga2V5IGlzIHRoZSBkb3VibGUgcmVwcmVz
ZW50YXRpb24gZm9yIGFuIGludGVnZXIsIHdlIGNvbnZlcnQgaXQgdG8gYW4gaW50ZWdlci4KKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGkpOworICAgIH0KKyAgICAvLyBUaGlzIG1lYW5zIGtleSBp
cyBkZWZpbml0ZWx5IG5vdCBuZWdhdGl2ZSB6ZXJvLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5vdCBh
IGRvdWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiAKKyAgICByZXR1cm4ga2V5Owor
fQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vcm1hbGl6
ZU1hcEtleSh2YWx1ZSkgPT0gdmFsdWUsICJXZSBleHBlY3Qgbm9ybWFsaXplZCB2YWx1ZXMgZmxv
d2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uIik7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkgeworICAgICAgICBk
b3VibGUgZCA9IHZhbHVlLmFzRG91YmxlKCk7CisgICAgICAgIGlmICghc3RkOjppc25hbihkKSkg
eworICAgICAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgICAgICAgICAg
aWYgKGkgPT0gZCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOworICAgICAg
ICB9CisgICAgfQorICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgd3RmU3Ry
aW5nID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgICAgcmV0dXJu
IHd0ZlN0cmluZy5pbXBsKCktPmhhc2goKTsKKyAgICB9CisgICAgdWludDY0X3QgcmF3VmFsdWUg
PSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIC8vIEZJWE1FOiB3cml0ZSBvdXQgb3VyIG93
biBpbnQgaGFzaCBmdW5jdGlvbiBzbyB3ZSdyZSBub3QgZGVwZW5kZW50IG9uIFdURidzIGhhc2gg
ZnVuY3Rpb24uCisgICAgcmV0dXJuIFdURjo6aW50SGFzaChyYXdWYWx1ZSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBJbXBsIDogcHVi
bGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hN
YXBCdWZmZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBCdWZmZXJUeXBlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShW
TSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUu
Z2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0
VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQs
IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSwgU3RydWN0
dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2bS5oYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwSW1wbCogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpLCAiV2UgYXNz
dW1lIHRoaXMgdG8gYmUgdHJ1ZSBpbiB0aGUgREZHIGFuZCBGVEwgSklULiIpOworCisgICAgICAg
IEhhc2hNYXBJbXBsKiBpbXBsID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcElt
cGw+KHZtLmhlYXApKSBIYXNoTWFwSW1wbCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAg
ICAgIGltcGwtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZp
c2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgSGFzaE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9z
aXplKDApCisgICAgICAgICwgbV9kZWxldGVDb3VudCgwKQorICAgICAgICAsIG1fY2FwYWNpdHko
NCkKKyAgICB7CisgICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmdldCgpLT5idWZmZXIoKTsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAg
IHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICAgICAgbWFrZUFuZFNldE5ld0J1ZmZl
cihleGVjLCB2bSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9oZWFkLnNldCh2bSwgdGhpcywgSGFzaE1h
cEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSkpOworICAgICAgICBtX3RhaWwuc2V0KHZtLCB0aGlzLCBI
YXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisKKyAgICAgICAgbV9oZWFkLT5zZXROZXh0
KHZtLCBtX3RhaWwuZ2V0KCkpOworICAgICAgICBtX3RhaWwtPnNldFByZXYodm0sIG1faGVhZC5n
ZXQoKSk7CisgICAgICAgIG1faGVhZC0+c2V0RGVsZXRlZCh0cnVlKTsKKyAgICAgICAgbV90YWls
LT5zZXREZWxldGVkKHRydWUpOworCisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXRU
eXBlKiBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFz
aE1hcEJ1Y2tldFR5cGUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0xKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0VtcHR5KEhhc2hNYXBCdWNrZXRUeXBlKiBi
dWNrZXQpCisgICAgeworICAgICAgICByZXR1cm4gYnVja2V0ID09IGVtcHR5VmFsdWUoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUqIGRlbGV0ZWRWYWx1ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBCdWNrZXRUeXBlKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigtMykpOworICAgIH0KKworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNEZWxldGVkKEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCisgICAgeworICAgICAg
ICByZXR1cm4gYnVja2V0ID09IGRlbGV0ZWRWYWx1ZSgpOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXkpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICB1
aW50MzJfdCBoYXNoID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBrZXkpOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIGZpbmRCdWNrZXQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAga2V5ID0gbm9ybWFsaXplTWFw
S2V5KGtleSk7CisgICAgICAgIHJldHVybiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1h
bGl6ZWQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBpZiAo
SGFzaE1hcEJ1Y2tldFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSkpCisgICAg
ICAgICAgICByZXR1cm4gKCpidWNrZXQpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gISFmaW5kQnVja2V0KGV4
ZWMsIGtleSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgIHsKKyAg
ICAgICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CisKKyAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAg
dWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0sIGtleSkgJiBtYXNrOworICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAg
d2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgICAgIGlmICghaXNEZWxldGVkKGJ1
Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVja2V0LT5rZXkoKSkpIHsKKyAgICAg
ICAgICAgICAgICBidWNrZXQtPnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAm
IG1hc2s7CisgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisK
KyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5ld0VudHJ5ID0gbV90YWlsLmdldCgpOworICAg
ICAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRLZXko
dm0sIGtleSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOworICAgICAg
ICBuZXdFbnRyeS0+c2V0RGVsZXRlZChmYWxzZSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBl
KiBuZXdUYWlsID0gSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIG1fdGFp
bC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOworICAgICAgICBuZXdUYWlsLT5zZXRQcmV2KHZtLCBu
ZXdFbnRyeSk7CisgICAgICAgIG5ld1RhaWwtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAgIG5l
d0VudHJ5LT5zZXROZXh0KHZtLCBuZXdUYWlsKTsKKyAgICAgICAgdWludDMyX3QgbmV3U2l6ZSA9
ICsrbV9zaXplOworICAgICAgICBpZiAoMipuZXdTaXplID4gbV9jYXBhY2l0eSkKKyAgICAgICAg
ICAgIHJlaGFzaChleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVtb3Zl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBIYXNoTWFwQnVj
a2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAgICAgaWYgKCFi
dWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGltcGwgPSAqYnVja2V0OworICAg
ICAgICBpbXBsLT5uZXh0KCktPnNldFByZXYodm0sIGltcGwtPnByZXYoKSk7CisgICAgICAgIGlt
cGwtPnByZXYoKS0+c2V0TmV4dCh2bSwgaW1wbC0+bmV4dCgpKTsKKyAgICAgICAgaW1wbC0+c2V0
RGVsZXRlZCh0cnVlKTsKKworICAgICAgICAqYnVja2V0ID0gZGVsZXRlZFZhbHVlKCk7CisKKyAg
ICAgICAgbV9kZWxldGVDb3VudCsrOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3NpemUgPj0gbV9kZWxldGVDb3VudCk7CisgICAgICAgIHJldHVybiBt
X3NpemUgLSBtX2RlbGV0ZUNvdW50OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBj
bGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgICAgICBtX3NpemUgPSAwOworICAgICAgICBtX2RlbGV0ZUNvdW50ID0gMDsKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQgPSBtX2hlYWQuZ2V0KCk7CisgICAgICAgIEhhc2hN
YXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIHRhaWwgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgIT0g
dGFpbCkgeworICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5leHQgPSBidWNrZXQtPm5l
eHQoKTsKKyAgICAgICAgICAgIC8vIFdlIHJlc3RhcnQgZWFjaCBpdGVyYXRvciBieSBwb2ludGlu
ZyBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgICAgIGJ1Y2tldC0+c2V0TmV4
dCh2bSwgaGVhZCk7CisgICAgICAgICAgICBidWNrZXQgPSBuZXh0OworICAgICAgICB9CisgICAg
ICAgIG1faGVhZC0+c2V0TmV4dCh2bSwgbV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90YWlsLT5z
ZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgICAgICBtX2NhcGFjaXR5ID0gNDsKKyAgICAg
ICAgbWFrZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBzaXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldFR5cGUqKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnVmZmVyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+LCBtX2J1ZmZl
cik7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhcGFjaXR5KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldFR5cGU+LCBtX2NhcGFjaXR5KTsKKyAgICB9CisKKyAgICBIYXNoTWFwQnVja2V0VHlwZSog
aGVhZCgpIHsgcmV0dXJuIG1faGVhZC5nZXQoKTsgfQorICAgIEhhc2hNYXBCdWNrZXRUeXBlKiB0
YWlsKCkgeyByZXR1cm4gbV90YWlsLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgQUxXQVlTX0lO
TElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFs
aXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsK
KyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1
aW50MzJfdCBpbmRleCA9IGhhc2ggJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoq
IGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVj
a2V0ID0gYnVmZmVyW2luZGV4XTsKKworICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkg
eworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVLZXlzRXF1YWwoZXhl
Yywga2V5LCBidWNrZXQtPmtleSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsg
aW5kZXg7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAg
ICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHsK
KyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIG1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5ICog
MjsKKyAgICAgICAgbWFrZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGl0ZXIgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldFR5cGUqIGVuZCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgY29uc3QgdWludDMy
X3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fY2Fw
YWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiog
YnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgewor
ICAgICAgICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0sIGl0ZXItPmtl
eSgpKSAmIG1hc2s7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzY29wZS5leGNl
cHRpb24oKSwgIkFsbCBrZXlzIHNob3VsZCBhbHJlYWR5IGJlIGhhc2hlZCBiZWZvcmUsIHNvIHRo
aXMgc2hvdWxkIG5vdCB0aHJvdyBiZWNhdXNlIGl0IHdvbid0IHJlc29sdmUgcm9wZXMuIik7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9
IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAg
ICAgICAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2luZGV4XSA9IGl0ZXI7CisgICAg
ICAgICAgICBpdGVyID0gaXRlci0+bmV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBtYWtlQW5kU2V0TmV3QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKworICAgICAg
ICBIYXNoTWFwQnVmZmVyVHlwZSogYnVmZmVyID0gSGFzaE1hcEJ1ZmZlclR5cGU6OmNyZWF0ZShl
eGVjLCB2bSwgdGhpcywgbV9jYXBhY2l0eSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVy
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2J1ZmZlci5zZXQodm0sIHRoaXMs
IGJ1ZmZlcik7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAgICAgICAgICAg
IEFTU0VSVChpc0VtcHR5KHRoaXMtPmJ1ZmZlcigpW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1faGVhZDsKKyAgICBXcml0ZUJh
cnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1fdGFpbDsKKyAgICBDb3B5QmFycmllcjxIYXNoTWFw
QnVmZmVyVHlwZT4gbV9idWZmZXI7CisgICAgdWludDMyX3QgbV9zaXplOworICAgIHVpbnQzMl90
IG1fZGVsZXRlQ291bnQ7CisgICAgdWludDMyX3QgbV9jYXBhY2l0eTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIGVudW0gSlNfRVhQT1JU
X1BSSVZBVEUgSW50cmluc2ljIHsKICAgICBJc1JlZ0V4cE9iamVjdEludHJpbnNpYywKICAgICBJ
c1R5cGVkQXJyYXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2Fs
bEludHJpbnNpYywKKyAgICBKU01hcEdldEludHJpbnNpYywKKyAgICBKU01hcEhhc0ludHJpbnNp
YywKKyAgICBKU1NldEhhc0ludHJpbnNpYywKIAogICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgog
ICAgIFR5cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw2
ICs2MDYsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTQ2VsbCogYSwgCiAKIGJv
b2wgaXNUaGlzVmFsdWVBbHRlcmVkKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0KTsKIAorLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZQorYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBhLCBKU1ZhbHVlIGIpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpT
Q0pTVmFsdWVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU4
LDYgKzEwNTgsMjIgQEAgQUxXQVlTX0lOTElORSBib29sIGlzVGhpc1ZhbHVlQWx0ZXJlZChjbwog
ICAgIHJldHVybiB0cnVlOwogfQogCisvLyBTZWUgc2VjdGlvbiA3LjIuOTogaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlCitBTFdBWVNfSU5MSU5FIGJvb2wgc2Ft
ZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgaWYg
KCFhLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVj
LCBhLCBiKTsKKyAgICBpZiAoIWIuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGRvdWJsZSB4ID0gYS5hc051bWJlcigpOworICAgIGRvdWJsZSB5ID0gYi5hc051bWJlcigp
OworICAgIGJvb2wgeElzTmFOID0gc3RkOjppc25hbih4KTsKKyAgICBib29sIHlJc05hTiA9IHN0
ZDo6aXNuYW4oeSk7CisgICAgaWYgKHhJc05hTiB8fCB5SXNOYU4pCisgICAgICAgIHJldHVybiB4
SXNOYU4gJiYgeUlzTmFOOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpID09
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gSlNWYWx1ZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NDEsNyArNjQxLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcgogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5SZWZsZWN0LCByZWZsZWN0T2JqZWN0LCBEb250RW51bSk7CiAKICAgICBtX21vZHVsZUxv
YWRlclN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIHRoaXMsIG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9tb2R1
bGVMb2FkZXIuc2V0KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKHZtLCB0aGlzLCBt
X21vZHVsZUxvYWRlclN0cnVjdHVyZS5nZXQoKSkpOworICAgIG1fbW9kdWxlTG9hZGVyLnNldCh2
bSwgdGhpcywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZShnbG9iYWxFeGVjKCksIHZtLCB0aGlzLCBt
X21vZHVsZUxvYWRlclN0cnVjdHVyZS5nZXQoKSkpOwogICAgIGlmIChPcHRpb25zOjpleHBvc2VJ
bnRlcm5hbE1vZHVsZUxvYWRlcigpKQogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TG9hZGVyLCBtX21vZHVsZUxvYWRlci5nZXQoKSwgRG9u
dEVudW0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTTWFwLmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKKyNpbmNs
dWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5o
IgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5o
IgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCiAKQEAgLTM3LDY3ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7
Ci0gICAgdGhpc09iamVjdC0+SlNNYXA6On5KU01hcCgpOwotfQotCi1zaXplX3QgSlNNYXA6OmVz
dGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgc2l6ZV90IG1hcERhdGFTaXplID0gdGhpc09iamVjdC0+
bV9tYXBEYXRhLmNhcGFjaXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRT
aXplKGNlbGwpICsgbWFwRGF0YVNpemU7Ci19Ci0KIFN0cmluZyBKU01hcDo6dG9TdHJpbmdOYW1l
KGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJPYmplY3QiKTsKIH0KIAotdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwg
dmlzaXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAg
ICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nh
c3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9r
ZW4pOwotfQotCi1ib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
LXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Ci19Ci0KLXNpemVf
dCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5z
aXplKGV4ZWMpOwotfQotCi1KU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlz
LCBrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAg
ICBtX21hcERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywg
a2V5KTsKLX0KLQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMDggKzI2LDQ5IEBACiAjaWZuZGVmIEpTTWFwX2gKICNk
ZWZpbmUgSlNNYXBfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKKyNpbmNs
dWRlICJNYXBCYXNlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJNYXBEYXRh
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi1jbGFzcyBK
U01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU01hcCA6IHB1Ymxp
YyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+IHsKKyAg
ICB0eXBlZGVmIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pj4gQmFzZTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7
Ci0KICAgICBmcmllbmQgY2xhc3MgSlNNYXBJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJraW5n
IGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZl
IGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFzcyBF
bnRyeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5
OwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKLQotICAgIHB1YmxpYzoK
LSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCog
b3duZXIsIEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0s
IG93bmVyLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3Jp
dGVCYXJyaWVyKEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZh
bHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBKU01hcEl0ZXJhdG9yPiBNYXBEYXRhOwot
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNN
YXAodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5n
ZXQoZXhlYywga2V5KTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVl
KTsKLSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3Rh
dGUqLCBKU1ZhbHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVjU3RhdGUq
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUq
KTsKLSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSwgdmFsdWUpOworICAgIH0KIAog
cHJpdmF0ZToKICAgICBKU01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMpCiAg
ICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFj
a2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwotCi0gICAg
TWFwRGF0YSBtX21hcERhdGE7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01h
cEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKKyNpbmNsdWRlICJDb21t
b25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNNYXAuaCIKQEAgLTQxLDYgKzQ0LDcgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBt
X21hcC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJdGVyYXRvcih2bSwg
bV9tYXAtPmltcGwoKS0+aGVhZCgpKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00OSw2ICs1Myw3
IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9tYXApOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIpOwog
fQogCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjcsOSBAQCBKU1ZhbHVl
IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTTWFwSXRlcmF0b3IqIEpTTWFw
SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNsb25lID0gSlNN
YXBJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9tYXAuZ2V0KCksIG1fa2luZCk7Ci0gICAg
Y2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBjbG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwg
bV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQoKSk7CiAgICAg
cmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPiBIYXNoTWFwQnVja2V0OwogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOwogCkBAIC01MSw1MiArNTIsNjIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIGFk
dmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQ
YWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0
KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgpOworICAg
ICAgICBpZiAoIXByZXYpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldCogYnVja2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChidWNr
ZXQgJiYgYnVja2V0LT5kZWxldGVkKCkpIHsKKyAgICAgICAgICAgIHByZXYgPSBidWNrZXQ7Cisg
ICAgICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgbnVsbHB0
cik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBzZXRJ
dGVyYXRvcihleGVjLT52bSgpLCBidWNrZXQpOyAvLyBXZSBrZWVwIG1faXRlciBvbiB0aGUgbGFz
dCB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisgICAgYm9vbCBuZXh0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBIYXNoTWFwQnVj
a2V0KiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVyYXRl
VmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2YWx1
ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJhdGVL
ZXkpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBi
dWNrZXQtPmtleSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBh
aXIoY2FsbEZyYW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZSA9
IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT52YWx1ZSgpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFsdWUoSlNWYWx1ZSYg
a2V5LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6Oktl
eVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0
b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0
ZXIoZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGtleSA9IHBhaXIua2V5OwotICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7
CisgICAgICAgIGtleSA9IGJ1Y2tldC0+a2V5KCk7CisgICAgICAgIHZhbHVlID0gYnVja2V0LT52
YWx1ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaCgp
Ci0gICAgewotICAgICAgICBtX2l0ZXJhdG9yLmZpbmlzaCgpOwotICAgIH0KLQogICAgIEl0ZXJh
dGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEpTVmFsdWUgaXRl
cmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmdldCgpOyB9CiAgICAgSlNNYXBJdGVy
YXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JE
YXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2l0ZXJhdG9yOwot
ICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAg
IEpTTWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNNYXAqLCBJdGVy
YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAs
IG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fbWFwRGF0YS5jcmVhdGVJdGVyYXRvckRhdGEo
dGhpcykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeyB9CisKKyAgICB2b2lkIHNldEl0
ZXJhdG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQogICAgIHsKKyAgICAgICAgbV9p
dGVyLnNldE1heUJlTnVsbCh2bSwgdGhpcywgYnVja2V0KTsKICAgICB9CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKQEAgLTEwNCw3ICsx
MTUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAgSlNN
YXA6Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxI
YXNoTWFwQnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNw
cAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSArNTUsMTQgQEAgSlNNb2R1
bGVMb2FkZXI6OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwgUwogewogfQogCi12b2lkIEpTTW9kdWxl
TG9hZGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBKU01hcDo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3Jl
YXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBtYXApOwogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TG9hZGVyLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgIFJlYWR5ID0gNiwKICAgICB9OwogCi0gICAgc3RhdGljIEpTTW9kdWxl
TG9hZGVyKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNNb2R1bGVMb2FkZXIqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU01vZHVsZUxvYWRlciogb2JqZWN0ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVMb2FkZXI+KHZtLmhlYXApKSBKU01v
ZHVsZUxvYWRlcih2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlv
bih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVj
LCB2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwg
SlNWYWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3JkLCBKU1ZhbHVlIGluaXRpYXRvcik7CiAK
IHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJiwgSlNHbG9iYWxPYmpl
Y3QqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA1MzA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTcgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZGVzdHJv
eShKU0NlbGwqIGNlbAogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlUmVjb3JkOjp+SlNNb2R1bGVS
ZWNvcmQoKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQordm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBBU0NJSUxpdGVyYWwoInJlZ2lzdHJ5RW50cnkiKSksIGpzVW5kZWZpbmVkKCkpOwogICAg
IHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgi
ZXZhbHVhdGVkIikpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIG1fZGVwZW5kZW5jaWVzTWFw
LnNldCh2bSwgdGhpcywgSlNNYXA6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCktPm1hcFN0cnVj
dHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+bWFw
U3RydWN0dXJlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgbV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwogICAgIHB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZGVwZW5kZW5jaWVz
TWFwIikpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjA1MzA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29y
a2luZyBjb3B5KQpAQCAtODcsMTAgKzg3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U01vZHVsZVJlY29yZCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgY29u
c3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxl
RW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgc3RhdGljIEpTTW9kdWxlUmVjb3Jk
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUs
IGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJp
YWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgSlNNb2R1
bGVSZWNvcmQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVS
ZWNvcmQ+KHZtLmhlYXApKSBKU01vZHVsZVJlY29yZCh2bSwgc3RydWN0dXJlLCBtb2R1bGVLZXks
IHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKTsKLSAgICAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApA
QCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZN
Jik7CiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogZ2V0TW9kdWxlTmFtZXNwYWNlKEV4
ZWNTdGF0ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3Bw
CShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDU5ICszNyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjb25zdCBDbGFzc0luZm8gSlNTZXQ6OnNfaW5mbyA9IHsgIlNldCIsICZCYXNlOjpzX2luZm8s
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTZXQpIH07CiAKLXZvaWQgSlNTZXQ6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQotewotICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4o
Y2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNTZXQ6On5KU1NldCgpOwotfQotCiBTdHJpbmcgSlNT
ZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopCiB7CiAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiT2JqZWN0Iik7CiB9CiAKLXNpemVfdCBKU1NldDo6ZXN0aW1hdGVk
U2l6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
ZXQqPihjZWxsKTsKLSAgICBzaXplX3Qgc2V0RGF0YVNpemUgPSB0aGlzT2JqZWN0LT5tX3NldERh
dGEuY2FwYWNpdHlJbkJ5dGVzKCk7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2Vs
bCkgKyBzZXREYXRhU2l6ZTsKLX0KLQotdm9pZCBKU1NldDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7Ci0gICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS52aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpTU2V0Ojpjb3B5QmFja2luZ1N0
b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikK
LXsKLSAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAg
ICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRv
ciwgdG9rZW4pOwotfQotCi1ib29sIEpTU2V0OjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiBtX3NldERhdGEuY29udGFpbnMoZXhlYywgdmFsdWUpOwot
fQotCi1zaXplX3QgSlNTZXQ6OnNpemUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBt
X3NldERhdGEuc2l6ZShleGVjKTsKLX0KLQotdm9pZCBKU1NldDo6YWRkKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBtX3NldERhdGEuc2V0KGV4ZWMsIHRoaXMsIHZhbHVl
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgSlNTZXQ6OmNsZWFyKEV4ZWNTdGF0ZSopCi17Ci0gICAgbV9z
ZXREYXRhLmNsZWFyKCk7Ci19Ci0KLWJvb2wgSlNTZXQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5yZW1vdmUoZXhlYywgdmFs
dWUpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDEwMyArMjYsNDYgQEAKICNpZm5kZWYgSlNTZXRfaAogI2Rl
ZmluZSBKU1NldF9oCiAKKyNpbmNsdWRlICJNYXBCYXNlLmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVj
dGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLWNsYXNzIEpT
U2V0IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTU2V0IDogcHVibGlj
IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+IHsKKyAgICB0eXBl
ZGVmIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+IEJhc2U7CiBw
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCiAgICAgZnJp
ZW5kIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMg
ZXhwZWN0IEVudHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAv
LyBmaWVsZHMgYmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgY2xhc3MgRW50cnkgewotICAg
IHByaXZhdGU6Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2tleTsKLQotICAgIHB1
YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmbV9rZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXko
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIGtleSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9rZXkuc2V0KHZtLCBvd25lciwga2V5KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgc2V0S2V5V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlIGtleSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9rZXkuc2V0V2l0aG91dFdyaXRlQmFycmllcihrZXkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2tleS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHR5cGVk
ZWYgTWFwRGF0YUltcGw8RW50cnksIEpTU2V0SXRlcmF0b3I+IFNldERhdGE7Ci0KICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKEpTU2V0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSlNTZXQqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTZXQ+KHZtLmhlYXApKSBKU1NldCh2bSwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVj
LT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSk7CiAgICAg
fQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6ZV90IHNpemUo
RXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoRXhlY1N0YXRlKiwg
SlNWYWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJlbW92ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKLQogcHJpdmF0ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAg
LCBtX3NldERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCop
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwg
Q29weVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVj
dCosIEV4ZWNTdGF0ZSopOwotCi0gICAgU2V0RGF0YSBtX3NldERhdGE7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgdm9pZCBKU1NldEl0
ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBtX3NldC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJ
dGVyYXRvcih2bSwgbV9zZXQtPmltcGwoKS0+aGVhZCgpKTsKIH0KIAogdm9pZCBKU1NldEl0ZXJh
dG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBA
IC00OSw2ICs1MCw3IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9zZXQpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX2l0ZXIpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjQs
OSBAQCBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTU2V0SXRl
cmF0b3IqIEpTU2V0SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRv
IGNsb25lID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgp
LT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1f
a2luZCk7Ci0gICAgY2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwg
ZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBt
X3NldC5nZXQoKSwgbV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5n
ZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1NldEl0ZXJhdG9y
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tldDxI
YXNoTWFwQnVja2V0RGF0YUtleT4gSGFzaE1hcEJ1Y2tldDsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIApAQCAtNTIsNDYgKzUzLDU5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVj
a2V0KiBhZHZhbmNlSXRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBXVEY6Oktl
eVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0
b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogcHJldiA9IG1faXRlci5nZXQo
KTsKKyAgICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOworICAgICAgICB3aGls
ZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKSB7CisgICAgICAgICAgICBwcmV2ID0gYnVj
a2V0OworICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCks
IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgYnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0ZXIgb24g
dGhlIGxhc3QgdmFsdWUuCisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorCisgICAgYm9v
bCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBI
YXNoTWFwQnVja2V0KiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFi
dWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgaWYgKG1fa2luZCA9
PSBJdGVyYXRlVmFsdWUgfHwgbV9raW5kID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2YWx1
ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPmtleSgpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoY2FsbEZyYW1lLCBwYWlyLmtl
eSwgcGFpci5rZXkpOworICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGV4ZWMsIGJ1Y2tl
dC0+a2V5KCksIGJ1Y2tldC0+a2V5KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICB2b2lkIGZpbmlzaCgpCi0gICAgewotICAgICAgICBtX2l0ZXJhdG9yLmZpbmlzaCgpOwot
ICAgIH0KLQogICAgIEl0ZXJhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQogICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmdldCgp
OyB9CiAgICAgSlNTZXRJdGVyYXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU1NldDo6
U2V0RGF0YTo6SXRlcmF0b3JEYXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICZtX2l0ZXJhdG9yOwotICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU1NldEl0ZXJhdG9yKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0
aW9uS2luZCBraW5kKQorICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNTZXQqLCBJdGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQotICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fc2V0RGF0YS5j
cmVhdGVJdGVyYXRvckRhdGEodGhpcykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgewog
ICAgIH0KIAorICAgIHZvaWQgc2V0SXRlcmF0b3IoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNr
ZXQpCisgICAgeworICAgICAgICBtX2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQp
OyAKKyAgICB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNTZXQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2Fs
bEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3Nl
dDsKLSAgICBKU1NldDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3Jp
dGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1faXRlcjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2lu
ZDsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVy
YXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNp
b24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDEwIEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAg
ICAgTW9kdWxlRW52aXJvbm1lbnRUeXBlLAogICAgIFJlZ0V4cE9iamVjdFR5cGUsCiAgICAgUHJv
eHlPYmplY3RUeXBlLAorICAgIEpTTWFwVHlwZSwKKyAgICBKU1NldFR5cGUsCiAKLSAgICBMYXN0
SlNDT2JqZWN0VHlwZSA9IFByb3h5T2JqZWN0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlwZSA9
IEpTTWFwVHlwZSwKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU1R5cGUpID09IHNpemVv
Zih1aW50OF90KSwgc2l6ZW9mX2pzdHlwZV9pc19vbmVfYnl0ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCisKKyNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK3ZvaWQgTWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT46
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBNYXBCYXNlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TWFwQmFzZSo+KGNlbGwpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fbWFwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hN
YXBCdWNrZXRUeXBlPgorc2l6ZV90IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+Ojplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICAvLyBGSVhNRToKKyAgICByZXR1cm4gQmFzZTo6
ZXN0aW1hdGVkU2l6ZShjZWxsKTsKK30KKwordGVtcGxhdGUgY2xhc3MgTWFwQmFzZTxIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+PjsKK3RlbXBsYXRlIGNsYXNzIE1hcEJh
c2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OworICAgCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIYXNoTWFwSW1w
bC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+CitjbGFzcyBNYXBCYXNlIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5
cGU+IEhhc2hNYXBJbXBsOworICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworcHVi
bGljOgorCisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0VHlwZSBCdWNrZXRUeXBlOworCisgICAg
QUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbWFwLT5zaXplKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFw
LT5oYXMoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXIo
RXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgbV9tYXAtPmNsZWFyKGV4ZWMpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+cmVtb3ZlKGV4ZWMsIGtleSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNr
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX21hcC0+ZmluZEJ1Y2tldChleGVjLCBrZXksIGhhc2gpOworICAgIH0K
KworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZIYXNoTWFwSW1wbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+LCBt
X21hcCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwSW1wbCogaW1wbCgpIHsg
cmV0dXJuIG1fbWFwLmdldCgpOyB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAg
IEhhc2hNYXBJbXBsKiBpbXBsID0gSGFzaE1hcEltcGw6OmNyZWF0ZShleGVjLCB2bSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fbWFwLnNldCh2bSwgdGhpcywgaW1wbCk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgTWFwQmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBlc3Rp
bWF0ZWRTaXplKEpTQ2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwSW1wbD4gbV9tYXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsOSArNjIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxG
dW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSog
bWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
ZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4
ZWMsIG1hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBNYXBJdGVyYXRvcgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVy
YXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNl
KSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVl
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTQgKzcwLDEzIEBA
IHZvaWQgTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogICAgIEpTQ19OQVRJ
VkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBt
YXBQcm90b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFBy
b3RvRnVuY0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBE
b250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAg
ICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldElu
dHJpbnNpYyk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwg
MSwgSlNNYXBIYXNJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51
bSwgMik7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5j
S2V5cywgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUo
KSwgbWFwUHJvdG9GdW5jVmFsdWVzLCBEb250RW51bSwgMCk7CiAKLSAgICAvLyBQcml2YXRlIGdl
dCAvIHNldCBvcGVyYXRpb25zLgotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCks
IG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lD
X0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5nZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01h
cEdldEludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFw
UHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVu
Y0VudHJpZXMpOwpAQCAtOTMsMTYgKzkyLDIxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFw
KiBnZXRNYXAoQ2FsbEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNP
YmplY3QoKSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAg
ICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJv
cihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
Ci0gICAgSlNNYXAqIG1hcCA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAg
IGlmICghbWFwKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbWFwOworCisgICAgaWYg
KExJS0VMWSh0aGlzVmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKQorICAgICAg
ICByZXR1cm4ganNDYXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5v
bi1NYXAgb2JqZWN0IikpOworICAgIHJldHVybiBudWxscHRyOworfQorCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwo
KS0+dHlwZSgpID09IEpTTWFwVHlwZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTg5LDExICsx
OTMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+
Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2Jq
LCBJdGVyYXRlS2V5KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0
ZUZ1bmNJc01hcChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKSkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFw
SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpT
TWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKQEAgLTIwNiwxMyArMjA1LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBBU1NFUlQoanNE
eW5hbWljQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU01h
cEl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1Zh
bHVlKCkpOwogICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoaXRlcmF0b3ItPm5leHRL
ZXlWYWx1ZShrZXksIHZhbHVlKSkgeworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGV4
ZWMsIGtleSwgdmFsdWUpKSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0
PEpTQXJyYXkqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJlc3VsdEFy
cmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBrZXkpOwogICAgICAgICByZXN1bHRBcnJheS0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgMSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwyMiArMTkx
LDYgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAgIG1fYXR0
cmlidXRlcyAmPSB+UmVhZE9ubHk7CiB9CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQotewotICAgIGlmICgh
YS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywg
YSwgYik7Ci0gICAgaWYgKCFiLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkb3VibGUgeCA9IGEuYXNOdW1iZXIoKTsKLSAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsK
LSAgICBib29sIHhJc05hTiA9IHN0ZDo6aXNuYW4oeCk7Ci0gICAgYm9vbCB5SXNOYU4gPSBzdGQ6
OmlzbmFuKHkpOwotICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQotICAgICAgICByZXR1cm4geElz
TmFOICYmIHlJc05hTjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHkpOwotfQotCiBib29sIFByb3BlcnR5RGVzY3JpcHRvcjo6
ZXF1YWxUbyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKG90aGVyLm1fdmFsdWUuaXNFbXB0eSgpICE9IG1fdmFsdWUuaXNF
bXB0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2Ny
aXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eURlc2NyaXB0b3IuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkg
KzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdldHRlclNldHRlcjsKIAotLy8gU2Vl
IEVTNS4xIDkuMTIKLWJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUp
OwotCiBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgewogcHVibGljOgogICAgIFByb3BlcnR5RGVz
Y3JpcHRvcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYz
LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2Fs
bGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rh
cmdldCgpLCBnbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEpTU2V0KiBzZXQgPSBK
U1NldDo6Y3JlYXRlKGV4ZWMsIHZtLCBzZXRTdHJ1Y3R1cmUpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCBzZXRTdHJ1Y3R1cmUp
OwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRl
cmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRl
cmF0b3IKIAogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2Fs
bEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1l
LCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+YWRkLCBzZXRQcm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwg
c2V0UHJvdG9GdW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQ
cm90b0Z1bmNEZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywg
RG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVu
dW0sIDEsIEpTU2V0SGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVi
bGljTmFtZSgpLCBzZXRQcm90b0Z1bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1
bmN0aW9uKiB2YWx1ZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmlu
ZygpLCBzZXRQcm90b0Z1bmNWYWx1ZXMpOwpAQCAtMTg2LDcgKzE4Niw2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIDAsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgfQotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiAr
NjUsNyBAQAogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRl
ICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUg
IkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXku
aCIKQEAgLTI0OSw2ICsyNTAsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhl
YXBUeXBlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUNvZGVCbG9j
a1N0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjZW5kaWYKKyAgICBoYXNoTWFwQnVja2V0U2V0U3Ry
dWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwQnVja2V0TWFw
U3RydWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZh
bHVlPjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGhhc2hNYXBJ
bXBsU2V0U3RydWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNo
TWFwQnVja2V0RGF0YUtleT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CisgICAgaGFzaE1hcEltcGxNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogCiAgICAgaXRlcmF0aW9uVGVybWluYXRvci5zZXQoKnRoaXMs
IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSwgMSkpKTsKICAgICBuYXRpdmVTdGRGdW5jdGlvbkNlbGxT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBOYXRpdmVTdGRGdW5jdGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDYgKzMzMSwxMCBAQCBwdWJsaWM6CiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gZXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiBmdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJB
c3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFw
QnVja2V0U2V0U3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRN
YXBTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEltcGxTZXRTdHJ1Y3R1
cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEltcGxNYXBTdHJ1Y3R1cmU7CiAKICAg
ICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+
IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9NYXBCYXNlX2gK
KyNkZWZpbmUgV2ViQ29yZV9GV0RfTWFwQmFzZV9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
TWFwQmFzZS5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNjgsNyArMTM2OCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENs
b25lU2VyaWFsaXplcjoKICAgICAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTog
ewogICAgICAgICAgICAgICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0gbWFwSXRlcmF0b3JT
dGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAgICAg
ICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShrZXksIHZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShtX2V4ZWMsIGtleSwgdmFs
dWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgp
OwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFj
ay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFw
Kj4ob2JqZWN0KSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287702</attachid>
            <date>2016-09-01 16:47:35 -0700</date>
            <delta_ts>2016-09-01 19:23:32 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>146017</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0VTNlNhbXBsZUJlbmNoL2NsaS5qcwkod29ya2luZyBj
b3B5KQpAQCAtMzAsNCArMzAsNCBAQCBsb2FkKCJhaXJfYmVuY2htYXJrLmpzIik7CiBsb2FkKCJi
YXNpY19iZW5jaG1hcmsuanMiKTsKIGxvYWQoImdsdWUuanMiKTsKIAotZHJpdmVyLnN0YXJ0KDEw
KTsKK2RyaXZlci5zdGFydCg0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29y
ZV9TT1VSQ0VTCiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRl
ci5jcHAKKyAgICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmll
ci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVk
VHlwZS5jcHAKQEAgLTc1Miw2ICs3NTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwog
ICAgIHJ1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0ZXJhbFBh
cnNlci5jcHAKICAgICBydW50aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJhc2UuY3Bw
CiAgICAgcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9y
UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAwLDEwICsxMzAwLDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcwMEM1QTgz
NCAvKiBKSVRNYXRoSUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDc5MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVD
MDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9D
b2RlT3JpZ2luTWFwLmNwcCAqLzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBD
VG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVCMTk5
NzFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFz
ZS5jcHAgKi87IH07CisJCTc5NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhC
RTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZv
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2
ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5N
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVG
N0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAq
LzsgfTsKKwkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1
MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODMzMUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEy
MjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRN
YXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1
bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
MzUzMywxMCArMzUzNywxNCBAQAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0
aElDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENU
b0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJD
QjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dElu
Zm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3
QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdp
bk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGFzaE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEw
OTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyog
SklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklU
TWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NzQsNiAr
NTc4Miw4IEBACiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAq
LywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywK
IAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJ
NzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJCQk3OUEw
OTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNBMzQ5RDAz
OEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdD
NjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgz
RDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKQEAgLTU5ODIsNiArNTk5Miw4IEBACiAJCQkJ
QTdFMkVBNjkwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJCQlGNjky
QTg2ODAyNTU1OTdEMDFGRjYwRjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1
OTdEMDFGRjYwRjcgLyogTG9va3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEw
IC8qIE1hcEJhc2UuY3BwICovLAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBC
YXNlLmggKi8sCiAJCQkJQTcwMDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9y
LmNwcCAqLywKIAkJCQlBNzAwODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3Iu
aCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLApAQCAt
NzI3MSw2ICs3MjgzLDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVk
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxs
RnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBD
YWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgxRDc4QkUz
NTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3MUI4NEZC
NEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTc0MzcsNiArNzQ1MCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJD
IC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAw
NzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFB
QjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5
QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFw
aC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzEsNyBAQAogCQkJCTBGMDMzMkMwMThB
REZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZB
QTAwQ0Y2NTY0IC8qIEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdE
RkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtOTIwMSw2ICs5MjE2LDcgQEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJGRjJCMUFE
NDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlDQzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFy
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8q
IEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThE
Q0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAj
aW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1
ZGUgIkpTRnVuY3Rpb24uaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMzQ2LDYgKzM0OCwxMiBAQCBTcGVjdWxhdGVk
VHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBpZiAoY2xhc3NJbmZvID09IFJl
Z0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1JlZ0V4cE9iamVjdDsKKwor
ICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIFNwZWNN
YXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0OjppbmZvKCkpCisgICAgICAg
IHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChjbGFzc0luZm8tPmlzU3ViQ2xh
c3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3BlY0Z1bmN0aW9uOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MSArMzksNDMgQEAgY2xhc3Mg
U3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0ZWRUeXBlOwogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAgICAgPSAwOyAvLyBXZSBkb24n
dCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmlu
YWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGaW5hbE9i
amVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQXJyYXkgICAgICAgICAgICAg
ID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0gMXUgPDwgMjsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
SW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDhB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUgPDwgNTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdSA8PCA2OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5ICA9IDF1IDw8
IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRz
IHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5
ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Vp
bnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MzJB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdSA8PCAxMTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXVsbCA8PCAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxsIDw8IDE7IC8vIEl0J3MgZGVm
aW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bmN0
aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlv
bi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0g
MXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MTZBcnJheSAg
ICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MTZBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0lu
dDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMy
QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXVsbCA8PCA3OyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJheSAgICAgICAgPSAx
dWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRz
IHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5
ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5IG9y
IG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
RmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8PCAxMTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3BlY0ludDhBcnJh
eSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhBcnJheSB8IFNw
ZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50MzJBcnJheSB8
IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8PCAxMjsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBT
dHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVj
dCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBSZWdFeHBPYmplY3QgKGFu
ZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8IDE2OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJheSwgb3IgSlNGdW5j
dGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0ICAgICAgICAgICAg
ID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwgU3BlY1R5cGVk
QXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1bWVudHMgfCBT
cGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8g
Qml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlv
bi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0g
MXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVu
dGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAg
ICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIG5v
dCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RB
cmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBEaXJlY3RBcmd1
bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTY29wZWRBcmd1
bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29wZWRBcmd1bWVu
dHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdPYmplY3Qg
ICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1bGwg
PDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5vdCBhbnkgc3Vi
Y2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
TWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQncyBkZWZpbml0ZWx5IE1hcCBv
YmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwgPDwgMTc7IC8vIEl0J3MgZGVm
aW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1bGwgPDwg
MTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBK
U0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNP
YmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVu
Y3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Nj
b3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3Bl
Y01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7IC8vIEJpdG1hc2sg
dXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rpb24uCitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9IDF1bGwgPDwg
MTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBpZGVudGlmaWVy
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAgICAgICAgPSAx
dWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFu
IGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZyAgICAg
ICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdWYXI7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTeW1ib2wg
ICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3ltYm9sLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAgICAgICAgPSAxdSA8PCAy
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09i
amVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRo
aXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1bGwgPDwgMjE7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2Vs
bE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxs
IGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0
cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10
b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwgICAgICAgICAg
ICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNwZWNDZWxsT3Ro
ZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxsIDw8IDIzOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwgPDwgMjQ7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgogc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAgICAgPSBTcGVjQm9vbEludDMy
IHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyLgotc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdSA8PCAyMzsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQu
IEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8PCAyNTsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBk
ZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
QW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNwZWNJbnQ1Mk9ubHk7IC8vIEl0
J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50IGFyaXRobWV0aWMgb24uCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFzRG91YmxlICAgICA9IDF1IDw8
IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91Ymxl
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAx
dSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1MiBidXQgaXQncyBhIHJlYWwg
bnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4g
SW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3OyAvLyBJdCdzIGRlZmluaXRl
bHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5kIGl0J3MgYSBkb3VibGUu
CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVJlYWwgICAgICAgICA9IFNw
ZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJs
ZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBp
cyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgTmFO
IHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxsIDw8IDI4OyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdWxsIDw8IDI5OyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUgdG8gdGFnIChpLmUuIGltcHVy
ZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZU5hTiAgICAgICAgICA9
IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5hTjsgLy8gSXQncyBkZWZpbml0
ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5
dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZVB1cmVOYU47IC8v
IEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUsIGJ1dCBpdCdzIGRlZmluaXRl
bHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxE
b3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZU5hTjsgLy8gSXQncyBl
aXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgxLDEyICs4MywxMiBAQCBzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRG91Ymxl
UmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGVSZWFsLCBvciBhIEludDUy
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJlciAgICAgPSBT
cGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQz
MiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGltcHVyZSBOYU4uCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IFNwZWNB
bnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIsIEludDUyLCBv
ciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICA9IDF1IDw8IDI4OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhl
ciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9v
bGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgQm9vbGVh
bi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAgICAgICAgID0g
MXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAgICAgID0gU3Bl
Y0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFu
LCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0hl
YXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01p
c2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9u
bHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5vbi1PYmplY3QgSlNWYWx1ZS4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXUg
PDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMzI7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IFNwZWNIZWFwVG9wIHwgU3Bl
Y0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50
NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNwb25kcyB0byB3aGF0IGNvdWxk
IGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29kZVRvcCB8IFNwZWNGdWxsTnVt
YmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29kZSBjb3VsZCBzZWUgcGx1cyBl
eG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYgKzk3NywyMCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBC
dWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJc05v
bkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xl
YW4pOworICAgICAgICBicmVhazsKKworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNK
U0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0yODgzLDcgKzI4OTcsNiBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
CiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMobm9kZSk7CiAgICAgcmV0
dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJl
c3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzogeworICAgICAgICBpZiAo
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisKKyAgICAgICAgTm9kZSogbWFwID0gZ2V0KHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7CisgICAgICAgIE5v
ZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCByZWdpc3Rlck9mZnNl
dCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNoLCBrZXkpOworICAg
ICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgRWRnZShtYXAsIE1h
cE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNoKSk7CisgICAgICAgIE5vZGUqIHJlc3Vs
dCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgT3BJbmZvKCksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVy
YW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY2FzZSBK
U1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFwSGFzSW50cmluc2ljOiB7CisgICAgICAg
IGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKworICAgICAgICBOb2RlKiBtYXBPclNl
dCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdpc3Rlck9mZnNldCkpOwor
ICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMSwgcmVn
aXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwg
a2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2ljID09IEpTU2V0SGFzSW50
cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOworICAgICAgICBOb2RlKiBidWNr
ZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJbmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1
c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0g
YWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBidWNrZXQpOworICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYgKzEyNDMsMjcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9nU2hhZG93Q2hpY2tlblRhaWw6CiAgICAg
ICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKworICAgIGNhc2UgTWFwSGFz
aDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFkKE1pc2NGaWVsZHMpOworICAgICAgICBF
ZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBu
b2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEJ1Y2tldExvYywg
TWlzY0ZpZWxkcywgbWFwRWRnZSwga2V5RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgRWRnZSYgYnVja2V0RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwR2V0TG9jLCBNaXNjRmllbGRzLCBi
dWNrZXRFZGdlKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcFNldEhhc0xvYywgTWlzY0ZpZWxkcywgbm9kZS0+
Y2hpbGQxKCkpLCBMYXp5Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKICAgICAgICAgCiAg
ICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTAgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlKQogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2UgQ2hlY2tXYXRj
aGRvZ1RpbWVyOgogICAgIGNhc2UgU3RyaW5nRnJvbUNoYXJDb2RlOgorICAgIGNhc2UgTWFwSGFz
aDoKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6
CisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAg
ICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICBjYXNlIENoZWNrVGllclVwSW5Mb29w
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xODksNyArMTg5LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWRqYWNlbmN5TGlz
dDsKICAgICAKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHN0YXRpYyB1aW50MzJfdCBzaGlmdCgp
IHsgcmV0dXJuIDc7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIHVpbnQzMl90IHNoaWZ0KCkgeyBy
ZXR1cm4gODsgfQogICAgIAogICAgIHN0YXRpYyB1aW50cHRyX3QgbWFrZVdvcmQoTm9kZSogbm9k
ZSwgVXNlS2luZCB1c2VLaW5kLCBQcm9vZlN0YXR1cyBwcm9vZlN0YXR1cywgS2lsbFN0YXR1cyBr
aWxsU3RhdHVzKQogICAgIHsKQEAgLTE5Nyw4ICsxOTcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAg
dWludHB0cl90IHNoaWZ0ZWRWYWx1ZSA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpIDw8
IHNoaWZ0KCk7CiAgICAgICAgIEFTU0VSVCgoc2hpZnRlZFZhbHVlID4+IHNoaWZ0KCkpID09IGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpKTsKICAgICAgICAgQVNTRVJUKHVzZUtpbmQgPj0g
MCAmJiB1c2VLaW5kIDwgTGFzdFVzZUtpbmQpOwotICAgICAgICBBU1NFUlQoKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oTGFzdFVzZUtpbmQpIDw8IDIpIDw9IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDIpIDw8IHNoaWZ0KCkpKTsKLSAgICAgICAgcmV0dXJuIHNoaWZ0ZWRWYWx1ZSB8IChzdGF0aWNf
Y2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwoa2lsbFN0YXR1
cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92ZWQocHJvb2ZTdGF0
dXMpKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0
VXNlS2luZCkgPDwgMikgPCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSA8PCBzaGlmdCgpKSwg
IldlIHJlbHkgb24gdGhpcyBiZWluZyB0cnVlIHRvIG5vdCBjbG9iYmVyIHRoZSBub2RlIHBvaW50
ZXIuIik7CisgICAgICAgIHVpbnRwdHJfdCByZXN1bHQgPSBzaGlmdGVkVmFsdWUgfCAoc3RhdGlj
X2Nhc3Q8dWludHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0
dXMpIDw8IDEpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihERkc6OmlzUHJvdmVkKHByb29mU3Rh
dHVzKSk7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICB1bmlv
biBVIHsKKyAgICAgICAgICAgICAgICBVKCkgeyB3b3JkID0gMDsgfQorICAgICAgICAgICAgICAg
IHVpbnRwdHJfdCB3b3JkOworICAgICAgICAgICAgICAgIEVkZ2UgZWRnZTsKKyAgICAgICAgICAg
IH0gdTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVkZ2UudXNlS2luZFVuY2hlY2tlZCgpID09IHVz
ZUtpbmQpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5ub2RlKCkgPT0gbm9kZSk7CisgICAg
ICAgICAgICBBU1NFUlQodS5lZGdlLnByb29mU3RhdHVzVW5jaGVja2VkKCkgPT0gcHJvb2ZTdGF0
dXMpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5raWxsU3RhdHVzVW5jaGVja2VkKCkgPT0g
a2lsbFN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAg
ICAgCiAjZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ1LDYgKzE1NDUsMjkgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBHZXRN
YXBCdWNrZXQ6CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1h
cE9iamVjdFVzZSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPE1hcE9iamVjdFVzZT4obm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgICAgICBmaXhFZGdlPFNldE9iamVjdFVzZT4o
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBmaXhFZGdlPFVudHlwZWRVc2U+
KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUtPmNo
aWxkMygpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTG9hZEZyb21KU01h
cEJ1Y2tldDoKKyAgICAgICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNr
ZXQ6CisgICAgICAgICAgICBmaXhFZGdlPEtub3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNYXBIYXNoOgorICAgICAgICAgICAg
Zml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KwogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgLy8gSGF2ZSB0aGVzZSBuby1vcCBjYXNl
cyBoZXJlIHRvIGVuc3VyZSB0aGF0IG5vYm9keSBmb3JnZXRzIHRvIGFkZCBoYW5kbGVycyBmb3Ig
bmV3IG9wY29kZXMuCiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24uY3BwCShyZXZpc2lvbiAyMDUzMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0Myw2ICsxNDMsMTUgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIExvYwogICAgIGNhc2UgUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jOgogICAgICAg
ICBvdXQucHJpbnQoIlJlZ0V4cE9iamVjdExhc3RJbmRleExvYyIpOwogICAgICAgICByZXR1cm47
CisgICAgY2FzZSBKU01hcEJ1Y2tldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcEJ1Y2tl
dExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01hcEdldExvYzoKKyAgICAgICAg
b3V0LnByaW50KCJKU01hcEdldExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU01h
cFNldEhhc0xvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcFNldEhhc0xvYyIpOworICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5k
IHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAg
U3RhY2tMb2MsCi0gICAgU3RhY2tQYXlsb2FkTG9jCisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAg
IEpTTWFwQnVja2V0TG9jLAorICAgIEpTTWFwR2V0TG9jLAorICAgIEpTTWFwU2V0SGFzTG9jCiB9
OwogCiBjbGFzcyBIZWFwTG9jYXRpb24gewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDE5LDYgKzE0MTksNyBAQCBwdWJsaWM6CiAgICAg
ICAgIGNhc2UgU3RyaW5nUmVwbGFjZToKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlUmVnRXhw
OgogICAgICAgICBjYXNlIFRvTnVtYmVyOgorICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNr
ZXQ6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzg4LDcgKzM4OCwxMiBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0UHJvcGVydHlFbnVtZXJhdG9yLCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oR2V0RW51bWVyYXRv
clN0cnVjdHVyZVBuYW1lLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCiAgICAg
bWFjcm8oR2V0RW51bWVyYXRvckdlbmVyaWNQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVS
ZXN1bHRKUykgXAotICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykKKyAgICBt
YWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpIFwKKyAgICAvKiBIYXNoaW5nIG5vZGVz
IGZvciBKU01hcCBhbmQgSlNTZXQgKi8gXAorICAgIG1hY3JvKE1hcEhhc2gsIE5vZGVSZXN1bHRJ
bnQzMikgXAorICAgIG1hY3JvKEdldE1hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFj
cm8oTG9hZEZyb21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oSXNOb25F
bXB0eU1hcEJ1Y2tldCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKIAogLy8gVGhpcyBlbnVtIGdlbmVy
YXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5vZGUgdHlwZXMsCiAv
LyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwgb3V0IHRoZSBpZCAo
YXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsOCBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVy
aWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNh
bEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU1NldC5oIgog
I2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2lu
Y2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtMTgwMyw2ICsxODA1LDM0IEBAIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmEKICAgICBzY29wZS0+bWV0aG9kVGFibGUo
KS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSwgc2xvdCk7
CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSog
ZXhlYywgRW5jb2RlZEpTVmFsdWUgaW5wdXQpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICByZXR1
cm4ganNNYXBIYXNoKGV4ZWMsIHZtLCBub3JtYWxpemVNYXBLZXkoSlNWYWx1ZTo6ZGVjb2RlKGlu
cHV0KSkpOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVj
a2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1ZhbHVlIGtleSwgaW50
MzJfdCBoYXNoKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTTWFwOjpCdWNrZXRUeXBlKiogYnVj
a2V0ID0ganNDYXN0PEpTTWFwKj4obWFwKS0+ZmluZEJ1Y2tldChleGVjLCBKU1ZhbHVlOjpkZWNv
ZGUoa2V5KSwgaGFzaCk7CisgICAgaWYgKCFidWNrZXQpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiAqYnVja2V0OworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRK
U1ZhbHVlIGtleSwgaW50MzJfdCBoYXNoKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTU2V0OjpC
dWNrZXRUeXBlKiogYnVja2V0ID0ganNDYXN0PEpTU2V0Kj4obWFwKS0+ZmluZEJ1Y2tldChleGVj
LCBKU1ZhbHVlOjpkZWNvZGUoa2V5KSwgaGFzaCk7CisgICAgaWYgKCFidWNrZXQpCisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIHJldHVybiAqYnVja2V0OworfQorCiBleHRlcm4gIkMiIHZv
aWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvcHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KQogewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJh
YmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUgaW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291
bGRuJ3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0MiwxMCBAQCBjaGFyKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiBTdHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKik7CiBKU1N0cmluZyogSklUX09Q
RVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFyYWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJf
dCk7CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGlucHV0KTsKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25K
U01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMy
X3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVj
U3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CisKIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJpbmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJpbmcq
LCBTdHJ1Y3R1cmUqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09u
Q2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcx
MSw2ICs3MTEsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJp
YWJsZToKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgogICAgICAgICBjYXNlIEdldEZyb21B
cmd1bWVudHM6CisgICAgICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgY2Fz
ZSBUb051bWJlcjogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihtX2N1cnJlbnROb2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzQxLDYgKzc0Miwx
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBj
YXNlIE1hcEhhc2g6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAgICAg
ICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgR2V0UmVz
dExlbmd0aDogewogICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAg
ICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZl
VG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBGdW5jdGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9i
amVjdFVzZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgTWFw
T2JqZWN0VXNlOgorICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKICAgICAgICAgY2FzZSBPYmpl
Y3RPck90aGVyVXNlOgogICAgICAgICBjYXNlIFN0cmluZ0lkZW50VXNlOgogICAgICAgICBjYXNl
IFN0cmluZ1VzZToKQEAgLTM1NSw2ICszNTcsMTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0RHluYW1pY1ZhcjoKICAgICBjYXNlIFB1dER5
bmFtaWNWYXI6CiAgICAgY2FzZSBSZXNvbHZlU2NvcGU6CisgICAgY2FzZSBNYXBIYXNoOgorICAg
IGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICBj
YXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2Fz
ZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgi
CiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgi
CisjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3Jk
LmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1Byb3Bl
cnR5TmFtZUVudW1lcmF0b3IuaCIKQEAgLTQ3MjAsNiArNDcyMSw4MiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAg
IGNhc2UgTWFwSGFzaDogeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBpbnB1dCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisKKyAgICAgICAgSlNWYWx1ZVJlZ3MgaW5wdXRSZWdzID0gaW5wdXQuanNW
YWx1ZVJlZ3MoKTsKKworICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCBy
ZXN1bHRHUFIsIGlucHV0UmVncyk7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7Cisg
ICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGtl
eSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBo
YXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQg
cmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7CisgICAg
ICAgIEpTVmFsdWVSZWdzIGtleVJlZ3MgPSBrZXkuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BS
UmVnIGhhc2hHUFIgPSBoYXNoLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOworCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFw
T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KG5vZGUtPmNoaWxkMSgp
LCBtYXBHUFIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
U2V0T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KG5vZGUtPmNoaWxk
MSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBr
ZXlSZWdzLCBoYXNoR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlSZWdzLCBo
YXNoR1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgY2VsbFJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNl
IExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYnVj
a2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBh
eWxvYWQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOworICAgICAgICBHUFJSZWcgcmVz
dWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOworCisgICAgICAgIGF1dG8gbm90QnVja2V0ID0g
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgYnVja2V0R1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwg
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZWYWx1ZSgp
KSwgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKSk7CisgICAgICAg
IGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RCdWNrZXQubGluaygmbV9q
aXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRU
YWcpLCByZXN1bHRUYWdHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNr
ZXRHUFIgPSBidWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBib29s
ZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAg
IGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFrOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDkgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29yZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmly
b25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVu
dW1lcmF0b3IuaCIKKyNpbmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJnc0ZyYW1lLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdp
c3RlcnNNb2RlLmgiCkBAIC00NjE1LDYgKzQ2MTcsMTY4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBN
YXBIYXNoOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3Qgc3RyYWlnaHRIYXNoOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9u
ZTsKKyAgICAgICAgYXV0byBpc05vdENlbGwgPSBtX2ppdC5icmFuY2hJZk5vdENlbGwoaW5wdXRH
UFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAg
IHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7CisgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTU3RyaW5nOjpvZmZzZXRP
ZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIFN0cmluZ0ltcGw6
OmZsYWdzT2Zmc2V0KCkpLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC51cnNoaWZ0NjQoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMig2KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0
R1BSKSk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgaXNO
b3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5i
cmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUikpOworICAgICAgICBzdHJhaWdodEhhc2guYXBwZW5k
KG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MoaW5wdXRHUFIpKSk7CisgICAgICAgIHNs
b3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIHN0cmFpZ2h0SGFzaC5saW5r
KCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoaW5wdXRHUFIsIHJlc3VsdEdQUik7CisgICAg
ICAgIG1faml0LmpzTWFwSGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIGlucHV0R1BSKTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBpbnQzMlJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
ZXRNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgbWFzayh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IGluZGV4KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgYnVmZmVyKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3JhcnkgYnVja2V0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBoYXNoR1BSID0gaGFzaC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1hc2tH
UFIgPSBtYXNrLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGJ1ZmZlckdQUiA9IGJ1ZmZlci5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGtleUdQUiA9IGtleS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU1hcE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1hcEdQUiwgbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSA/IEpTTWFwOjpvZmZzZXRPZkhhc2hN
YXBJbXBsKCkgOiBKU1NldDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpKSwgYnVmZmVyR1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkNh
cGFjaXR5KCkpLCBtYXNrR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWFza0dQUik7CisgICAgICAgIG1faml0Lm1vdmUo
aGFzaEdQUiwgaW5kZXhHUFIpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29w
ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aENhc2VzOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbG9vcEFyb3VuZDsKKworICAgICAgICBtX2ppdC5h
bmQzMihtYXNrR1BSLCBpbmRleEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChidWZmZXJHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCksIGJ1Y2tldEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoYnVja2V0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICBhdXRvIG5vdFByZXNlbnRJblRhYmxlID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBidWNrZXRHUFIsIFRydXN0ZWRJ
bW1QdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpl
bXB0eVZhbHVlKCkpKTsKKyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBidWNrZXRHUFIsIFRydXN0ZWRJ
bW1QdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpk
ZWxldGVkVmFsdWUoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6
b2Zmc2V0T2ZLZXkoKSksIGJ1Y2tldEdQUik7CisKKyAgICAgICAgLy8gUGVyZm9ybSBPYmplY3Qu
aXMoKQorICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIGJ1Y2tldEdQUiwga2V5R1BSKSk7IC8vIFRoZXkncmUgZGVmaW5pdGVseSB0aGUgc2Ft
ZSB2YWx1ZSwgd2UgZm91bmQgdGhlIGJ1Y2tldCB3ZSB3ZXJlIGxvb2tpbmcgZm9yIQorICAgICAg
ICBhdXRvIG9uZUlzbnRDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGJ1
Y2tldEdQUikpOworICAgICAgICAvLyBmaXJzdCBpcyBhIGNlbGwgaGVyZS4KKyAgICAgICAgbG9v
cEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGtleUdQUikp
KTsKKyAgICAgICAgLy8gQm90aCBhcmUgY2VsbHMgaGVyZS4KKyAgICAgICAgbG9vcEFyb3VuZC5h
cHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBK
SVRDb21waWxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhlIGZpcnN0IGlz
IGEgc3RyaW5nIGhlcmUuCisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDgoSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
a2V5R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmlu
Z1R5cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZywgYnV0IHRoZSBzZWNv
bmQgaXMgbm90LCB3ZSBjb250aW51ZSB0byBsb29wIGFyb3VuZC4KKyAgICAgICAgbG9vcEFyb3Vu
ZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBvbmVJc250Q2VsbC5saW5rKCZtX2pp
dCk7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZG9uZSBhIDY0LWJpdCBjb21wYXJlIGF0IHRo
aXMgcG9pbnQsIHNvIGlmIG9uZSBpcyBub3QgYSBudW1iZXIsIHRoZXkncmUgZGVmaW5pdGVseSBu
b3QgZXF1YWwuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVt
YmVyKGJ1Y2tldEdQUikpOworICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdE51bWJlcihrZXlHUFIpKTsKKyAgICAgICAgLy8gQm90aCBhcmUgZGVmaW5pdGVseSBudW1i
ZXJzLiBJZiB3ZSBzZWUgYSBkb3VibGUsIHdlIGdvIHRvIHRoZSBzbG93IHBhdGguCisgICAgICAg
IHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIoYnVja2V0R1BSKSk7
CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIoa2V5
R1BSKSk7CisgICAgICAgIAorICAgICAgICBsb29wQXJvdW5kLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUik7CisgICAgICAgIG1faml0
Lmp1bXAoKS5saW5rVG8obG9vcCwgJm1faml0KTsKKworICAgICAgICBzbG93UGF0aENhc2VzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoaW5kZXhHUFIpOwor
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRH
UFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BS
LCBrZXlHUFIsIGhhc2hHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGluZGV4
R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RQcmVzZW50SW5UYWJsZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdEJ1Y2tldCA9IG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQUik7CisgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFsdWUoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RC
dWNrZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgSXNPYmplY3Q6IHsK
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczODEsNiArNzM4MSwzNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGVSZWdFeHBPYmplCiAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KGVk
Z2UsIG9wZXJhbmQuZ3ByKCkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVN
YXBPYmplY3QoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCkKK3sKKyAgICBzcGVjdWxhdGVDZWxsVHlw
ZShlZGdlLCBjZWxsLCBTcGVjTWFwT2JqZWN0LCBKU01hcFR5cGUpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY01hcE9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgc3BlY3VsYXRl
TWFwT2JqZWN0KGVkZ2UsIG9wZXJhbmQuZ3ByKCkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCkKK3sKKyAgICBzcGVj
dWxhdGVDZWxsVHlwZShlZGdlLCBjZWxsLCBTcGVjU2V0T2JqZWN0LCBKU1NldFR5cGUpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlKQorewor
ICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1NldE9iamVjdCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7Cisg
ICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UsIG9wZXJhbmQuZ3ByKCkpOworfQorCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UgZWRnZSkKIHsKICAgICBp
ZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpKQpAQCAtNzY2
OCw2ICs3Njk2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQK
ICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0
KGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAg
c3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldE9i
amVjdFVzZToKKyAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MywxNCArOTMsMTQgQEAgcHJpdmF0ZToKICAgICAvLyB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9y
LgogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgZW51bSBTcGlsbE9yZGVyIHsKLSAgICAgICAgU3Bp
bGxPcmRlckNvbnN0YW50ID0gMSwgLy8gbm8gc3BpbGwsIGFuZCBjaGVhcCBmaWxsCi0gICAgICAg
IFNwaWxsT3JkZXJTcGlsbGVkICA9IDIsIC8vIG5vIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJK
UyAgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJDZWxsICAgICA9
IDQsIC8vIG5lZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJTdG9yYWdlICA9IDQsIC8vIG5l
ZWRzIHNwaWxsCi0gICAgICAgIFNwaWxsT3JkZXJJbnRlZ2VyICA9IDUsIC8vIG5lZWRzIHNwaWxs
IGFuZCBib3gKLSAgICAgICAgU3BpbGxPcmRlckJvb2xlYW4gID0gNSwgLy8gbmVlZHMgc3BpbGwg
YW5kIGJveAotICAgICAgICBTcGlsbE9yZGVyRG91YmxlICAgPSA2LCAvLyBuZWVkcyBzcGlsbCBh
bmQgY29udmVydAorICAgICAgICBTcGlsbE9yZGVyQ29uc3RhbnQgID0gMSwgLy8gbm8gc3BpbGws
IGFuZCBjaGVhcCBmaWxsCisgICAgICAgIFNwaWxsT3JkZXJTcGlsbGVkICAgPSAyLCAvLyBubyBz
cGlsbAorICAgICAgICBTcGlsbE9yZGVySlMgICAgICAgID0gNCwgLy8gbmVlZHMgc3BpbGwKKyAg
ICAgICAgU3BpbGxPcmRlckNlbGwgICAgICA9IDQsIC8vIG5lZWRzIHNwaWxsCisgICAgICAgIFNw
aWxsT3JkZXJTdG9yYWdlICAgPSA0LCAvLyBuZWVkcyBzcGlsbAorICAgICAgICBTcGlsbE9yZGVy
SW50ZWdlciAgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAgICAgICBTcGlsbE9yZGVy
Qm9vbGVhbiAgID0gNSwgLy8gbmVlZHMgc3BpbGwgYW5kIGJveAorICAgICAgICBTcGlsbE9yZGVy
RG91YmxlICAgID0gNiwgLy8gbmVlZHMgc3BpbGwgYW5kIGNvbnZlcnQKICAgICB9OwogI2VsaWYg
VVNFKEpTVkFMVUUzMl82NCkKICAgICBlbnVtIFNwaWxsT3JkZXIgewpAQCAtNTE5LDcgKzUxOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3BlY2lhbCwgc2luY2UgaXQncyBu
b3QgYSBKUyB2YWx1ZSAtIGFzIGluIGl0J3Mgbm90IHZpc2libGUgdG8gSlMKICAgICAgICAgICAg
IC8vIGNvZGUuCiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihpbmZvLmdwcigpLCBKSVRDb21w
aWxlcjo6YWRkcmVzc0ZvcihzcGlsbE1lKSk7Ci0gICAgICAgICAgICBpbmZvLnNwaWxsKCptX3N0
cmVhbSwgc3BpbGxNZSwgRGF0YUZvcm1hdFN0b3JhZ2UpOworICAgICAgICAgICAgaW5mby5zcGls
bCgqbV9zdHJlYW0sIHNwaWxsTWUsIHNwaWxsRm9ybWF0KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogCkBAIC0xMjkxLDYgKzEyOTEsMTIgQEAgcHVibGljOgogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVy
YXRpb25fRUNKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcg
YXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
U2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFs
dWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3Rl
ZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJnMS5ncHIoKSwgYXJnMi5ncHIoKSwgbWF0aElDKTsKQEAgLTE2NzEsNiArMTY3
NywxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAg
ICAgfQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlv
bl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJh
dGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIsIHVuc2lnbmVk
IGFyZzMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
YXJnMSwgVHJ1c3RlZEltbTMyKGFyZzIpLCBUcnVzdGVkSW1tMzIoYXJnMykpOwpAQCAtMTcxOSw2
ICsxNzMxLDE4IEBAIHB1YmxpYzoKICAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQog
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0pa
IG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIs
IEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBhcmczKTsKKyAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAg
IH0KKworICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25f
RUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxKQorICAgIHsKKyAg
ICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlf
QVJHIGFyZzEucGF5bG9hZEdQUigpLCBhcmcxLnRhZ0dQUigpKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljIG9wZXJhdGlv
biwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcy
LCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwg
YXJnMS50YWdHUFIoKSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCksIG1hdGhJQyk7
CkBAIC0yNjU2LDYgKzI2ODAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlRmluYWxP
YmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVSZWdFeHBPYmplY3QoRWRnZSwgR1BSUmVn
IGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KEVkZ2UpOworICAgIHZvaWQg
c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVk
Z2UsIEdQUlJlZyBjZWxsKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlKTsKKyAg
ICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBz
cGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVk
Z2UgZWRnZSwgR1BSUmVnIGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRM
b2FkU3RvcmFnZShFZGdlIGVkZ2UsIEdQUlJlZyBzdHJpbmcsIEdQUlJlZyBzdG9yYWdlKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTQsNiArOTQsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFVzZQogICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQo
IlJlZ0V4cE9iamVjdCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYXBPYmplY3RVc2U6
CisgICAgICAgIG91dC5wcmludCgiTWFwT2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJTZXRPYmplY3RVc2UiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgb3V0
LnByaW50KCJPYmplY3RPck90aGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiAr
NjMsOCBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtub3duU3RyaW5nVXNlLAogICAgIEtub3duUHJp
bWl0aXZlVXNlLCAvLyBUaGlzIGJpemFycmUgdHlwZSBhcmlzZXMgZm9yIG9wX3N0cmNhdCwgd2hp
Y2ggaGFzIGEgYnl0ZWNvZGUgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBvbmx5IHNlZSBwcmltaXRp
dmVzIChpLmUuIG5vdCBvYmplY3RzKS4KICAgICBTeW1ib2xVc2UsCisgICAgTWFwT2JqZWN0VXNl
LAorICAgIFNldE9iamVjdFVzZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAgU3RyaW5nT3JT
dHJpbmdPYmplY3RVc2UsCiAgICAgTm90U3RyaW5nVmFyVXNlLApAQCAtMTM0LDYgKzEzNiwxMCBA
QCBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgICAgIHJldHVy
biBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0OwogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgICAg
ICByZXR1cm4gU3BlY1N5bWJvbDsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgcmV0
dXJuIFNwZWNNYXBPYmplY3Q7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHJldHVy
biBTcGVjU2V0T2JqZWN0OwogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICByZXR1
cm4gU3BlY1N0cmluZ09iamVjdDsKICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgpA
QCAtMjIxLDYgKzIyNyw4IEBAIGlubGluZSBib29sIGlzQ2VsbChVc2VLaW5kIGtpbmQpCiAgICAg
Y2FzZSBTeW1ib2xVc2U6CiAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgY2FzZSBTdHJp
bmdPclN0cmluZ09iamVjdFVzZToKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICBjYXNlIFNl
dE9iamVjdFVzZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5j
bHVkZSAiRlRMQWJzdHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5j
bHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU1NldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKQEAgLTEwMiw3ICsxMDQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgewogICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xh
c3NJbmZvT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3Byb3Rv
dHlwZSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVy
ZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQorICAgIG1hY3Jv
KFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBc
CisgICAgbWFjcm8oSlNNYXBfaGFzaE1hcEltcGwsIEpTTWFwOjpvZmZzZXRPZkhhc2hNYXBJbXBs
KCkpIFwKKyAgICBtYWNybyhKU1NldF9oYXNoTWFwSW1wbCwgSlNTZXQ6Om9mZnNldE9mSGFzaE1h
cEltcGwoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBJbXBsX2NhcGFjaXR5LCBIYXNoTWFwSW1wbDxI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQ2FwYWNpdHkoKSkg
XAorICAgIG1hY3JvKEhhc2hNYXBJbXBsX2J1ZmZlciwgIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSkgXAorICAgIG1hY3Jv
KEhhc2hNYXBCdWNrZXRfdmFsdWUsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT46Om9mZnNldE9mVmFsdWUoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNrZXRfa2V5LCBI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpKSBc
CiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAg
bWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9m
ZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MCw2ICsxODAsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKICAgICBjYXNlIFVucmVhY2hh
YmxlOgogICAgIGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgTWFwSGFzaDoKKyAgICBjYXNlIEdl
dE1hcEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05v
bkVtcHR5TWFwQnVja2V0OgogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVk
OgogICAgIGNhc2UgSXNCb29sZWFuOgpAQCAtNDM3LDYgKzQ0MSw4IEBAIENhcGFiaWxpdHlMZXZl
bCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09i
amVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgog
ICAgICAgICAgICAgICAgIGNhc2UgU3ltYm9sVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWFw
T2JqZWN0VXNlOgorICAgICAgICAgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWdFeHBP
YmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3MCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1l
bnRzVGFibGUuaCIKQEAgLTg5OCw2ICs4OTksMTggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJ
c0pTQXJyYXk6CiAgICAgICAgICAgICBjb21waWxlSXNKU0FycmF5KCk7CiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBNYXBIYXNoOgorICAgICAgICAgICAgY29tcGlsZU1hcEhhc2go
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICAg
ICAgICAgIGNvbXBpbGVHZXRNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlTG9hZEZyb21K
U01hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0
eU1hcEJ1Y2tldDoKKyAgICAgICAgICAgIGNvbXBpbGVJc05vbkVtcHR5TWFwQnVja2V0KCk7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgICAgIGNv
bXBpbGVJc09iamVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MzUxLDYgKzYzNjQsMjI4
IEBAIHByaXZhdGU6CiAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxs
UmVzdWx0LCBjZWxsUmVzdWx0KSk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlTWFwSGFzaCgp
CisgICAgeworICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBub3RDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBzdHJhaWdodEhhc2ggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBpc051bWJlckNhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBpc1N0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBu
b25FbXB0eVN0cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJyYW5j
aCgKKyAgICAgICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgp
KSksIHVuc3VyZShpc0NlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGwpKTsKKworICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2Fz
ZSk7CisgICAgICAgIExWYWx1ZSBpc1N0cmluZyA9IG1fb3V0LmVxdWFsKG1fb3V0LmxvYWQ4WmVy
b0V4dDMyKHZhbHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLCBtX291dC5jb25zdElu
dDMyKFN0cmluZ1R5cGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNT
dHJpbmcsIHVuc3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBub25FbXB0eVN0cmluZ0Nhc2UpOwor
ICAgICAgICBMVmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMu
SlNTdHJpbmdfdmFsdWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291
dC5lcXVhbChzdHJpbmdJbXBsLCBtX291dC5jb25zdEludFB0cigwKSksIHJhcmVseShzbG93Q2Fz
ZSksIHVzdWFsbHkobm9uRW1wdHlTdHJpbmdDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obm9uRW1wdHlTdHJpbmdDYXNlLCBub3RDZWxsKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBt
X291dC5sU2hyKG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFz
aEFuZEZsYWdzKSwgbV9vdXQuY29uc3RJbnQzMig2KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2gsIG1fb3V0LmNvbnN0SW50MzIoMCkpLAorICAg
ICAgICAgICAgcmFyZWx5KHNsb3dDYXNlKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsLCBpc051bWJlckNhc2UpOworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc051bWJlcih2YWx1ZSksIHVuc3VyZShpc051bWJlckNh
c2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oaXNO
dW1iZXJDYXNlLCBzdHJhaWdodEhhc2gpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAg
ICAgICBpc0ludDMyKHZhbHVlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCksIHVuc3VyZShzbG93Q2Fz
ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHN0cmFpZ2h0SGFzaCwgc2xvd0Nhc2UpOwor
ICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMzIpOworICAgICAgICBMVmFsdWUga2V5ID0gdmFs
dWU7CisgICAgICAgIExWYWx1ZSB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hs
KHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMzIpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5v
dCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8v
IGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9
IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigyMikpOworICAgICAgICBrZXkgPSBt
X291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDEzKTsK
KyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291
dC5jb25zdEludDMyKDEzKSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7Cisg
ICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtl
eSA+PiA4KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIo
dGVtcCwgbV9vdXQuY29uc3RJbnQzMig4KSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihr
ZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICAgICAgdGVtcCA9
IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMp
KTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBe
PSAoa2V5ID4+IDE1KTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0
LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxNSkpOworICAgICAgICBrZXkgPSBtX291dC5i
aXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICAg
ICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25z
dEludDMyKDI3KSk7CisgICAgICAgIHRlbXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAg
IGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAz
MSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAs
IG1fb3V0LmNvbnN0SW50MzIoMzEpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwg
dGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmNhc3RUb0ludDMyKGtleSk7CisKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFuY2hvcihrZXkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd0Nh
c2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3IoCisgICAgICAgICAgICB2bUNhbGwoSW50MzIsIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25NYXBIYXNoKSwgbV9jYWxsRnJhbWUsIHZhbHVlKSk7CisgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SW50MzIobV9vdXQucGhpKEludDMyLCBmYXN0UmVzdWx0
LCBzbG93UmVzdWx0LCBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGNvbXBpbGVHZXRNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgCisgICAgICAgIExCYXNp
Y0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGxvb3BBcm91bmQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBzbG93
UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFByZXNlbnRJ
blRhYmxlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1wdHlW
YWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdERlbGV0ZWRW
YWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJpdEVxdWFs
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5Tm90Q2Vs
bCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzQ2Vs
bCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVDZWxscyA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzU3RyaW5n
ID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNOdW1i
ZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJlTnVtYmVy
cyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzSW50
MzIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExWYWx1ZSBtYXA7CisgICAgICAgIGlmICht
X25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBt
YXAgPSBsb3dNYXBPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UgaWYgKG1f
bm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgIG1h
cCA9IGxvd1NldE9iamVjdChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBMVmFsdWUga2V5
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBs
b3dJbnQzMihtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBMVmFsdWUgaGFzaE1hcEltcGwg
PSBtX291dC5sb2FkUHRyKG1hcCwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2Jq
ZWN0VXNlID8gbV9oZWFwcy5KU01hcF9oYXNoTWFwSW1wbCA6IG1faGVhcHMuSlNTZXRfaGFzaE1h
cEltcGwpOworICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9hZFB0cihoYXNoTWFwSW1w
bCwgbV9oZWFwcy5IYXNoTWFwSW1wbF9idWZmZXIpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1f
b3V0LnN1YihtX291dC5sb2FkMzIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfY2Fw
YWNpdHkpLCBtX291dC5pbnQzMk9uZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhT
dGFydCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQp
OworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8obG9vcFN0
YXJ0LCBub3RFbXB0eVZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHVubWFza2VkSW5kZXggPSBtX291
dC5waGkoSW50MzIsIGluZGV4U3RhcnQpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5i
aXRBbmQobWFzaywgdW5tYXNrZWRJbmRleCk7CisgICAgICAgIExWYWx1ZSBoYXNoTWFwQnVja2V0
ID0gbV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlO
dW1iZXIoKSwgYnVmZmVyLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQp
KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhh
c2hNYXBCdWNrZXQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoaGFzaE1hcEJ1
Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleT4+OjplbXB0eVZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShub3RQ
cmVzZW50SW5UYWJsZSksIHVuc3VyZShub3RFbXB0eVZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8obm90RW1wdHlWYWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hN
YXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVl
KCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKG5vdERlbGV0ZWRW
YWx1ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERlbGV0ZWRWYWx1ZSwgbm90Qml0
RXF1YWwpOworICAgICAgICBMVmFsdWUgYnVja2V0S2V5ID0gbV9vdXQubG9hZDY0KGhhc2hNYXBC
dWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF9rZXkpOworICAgICAgICAvLyBQZXJmb3JtIE9i
amVjdC5pcygpCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtl
eSksCisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEJpdEVxdWFs
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWwsIGJ1Y2tldEtleUlzQ2Vs
bCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYnVja2V0S2V5KSwKKyAgICAgICAgICAg
IHVuc3VyZShidWNrZXRLZXlJc0NlbGwpLCB1bnN1cmUoYnVja2V0S2V5Tm90Q2VsbCkpOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwgYm90aEFyZUNlbGxzKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChrZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJvdGhB
cmVDZWxscyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Ym90aEFyZUNlbGxzLCBidWNrZXRLZXlJc1N0cmluZyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChp
c1N0cmluZyhidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzU3RyaW5n
KSwgdW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRL
ZXlJc1N0cmluZywgYnVja2V0S2V5Tm90Q2VsbCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0
cmluZyhrZXkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91
bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlOb3RDZWxsLCBidWNrZXRL
ZXlJc051bWJlcik7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihidWNrZXRLZXkp
LAorICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUoYnVja2V0S2V5SXNOdW1i
ZXIpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc051bWJlciwgYm90aEFy
ZU51bWJlcnMpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1iZXIoa2V5KSwKKyAgICAg
ICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKGJvdGhBcmVOdW1iZXJzKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYm90aEFyZU51bWJlcnMsIGJ1Y2tldEtleUlzSW50MzIpOwor
ICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihidWNrZXRLZXkpLAorICAgICAgICAgICAg
dW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGJ1Y2tldEtleUlzSW50MzIpKTsKKworICAgICAgICBt
X291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0ludDMyLCBsb29wQXJvdW5kKTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKGlzTm90SW50MzIoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcEFyb3Vu
ZCwgc2xvd1BhdGgpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHVubWFza2VkSW5k
ZXgsIG1fb3V0LmFuY2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSkpOworICAg
ICAgICBtX291dC5qdW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xv
d1BhdGgsIG5vdFByZXNlbnRJblRhYmxlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Bh
dGhSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksCisgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24obV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0
VXNlID8gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0IDogb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0
KSwgbV9jYWxsRnJhbWUsIG1hcCwga2V5LCBoYXNoKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RQcmVzZW50SW5UYWJsZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90UHJlc2VudFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBi
dWNrZXRSZXN1bHQsIHNsb3dQYXRoUmVzdWx0LCBub3RQcmVzZW50UmVzdWx0KSk7CisgICAgfQor
CisgICAgdm9pZCBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBM
VmFsdWUgbWFwQnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGhhc0J1Y2tldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgbm9CdWNrZXRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKworICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuZXF1YWwobWFwQnVja2V0LCBtX291dC5jb25zdEludFB0cigwKSksCisgICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGhhc0J1Y2tldCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaGFzQnVja2V0LCBjb250aW51
YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBidWNrZXRSZXN1bHQgPSBtX291dC5hbmNo
b3IobV9vdXQubG9hZDY0KG1hcEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0X3ZhbHVlKSk7
CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5w
aGkoSW50NjQsIG5vQnVja2V0UmVzdWx0LCBidWNrZXRSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2
b2lkIGNvbXBpbGVJc05vbkVtcHR5TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBi
dWNrZXQgPSBsb3dNYXBCdWNrZXQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5ub3RFcXVhbChidWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAg
ICAgICAgc2V0Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUlzT2Jq
ZWN0T3JOdWxsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qg
PSBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC05
OTI4LDYgKzEwMTYzLDIwIEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVj
dChlZGdlLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExW
YWx1ZSBsb3dNYXBPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIExWYWx1ZSBsb3dTZXRP
YmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwo
ZWRnZSk7CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCByZXN1bHQpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICBMVmFsdWUgbG93U3RyaW5nKEVkZ2Ug
ZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1
bGF0aW9uKQogICAgIHsKQEAgLTEwMDUxLDYgKzEwMzAwLDE3IEBAIHByaXZhdGU6CiAgICAgICAg
IHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQorCisgICAgTFZhbHVlIGxvd01hcEJ1Y2tldChFZGdlIGVkZ2UpCisgICAgeworICAg
ICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9tYXBCdWNrZXRWYWx1ZXMuZ2V0KGVkZ2Uu
bm9kZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJu
IHZhbHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2Vs
bChlZGdlKTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIHN0cmljdEludDUyVG9J
bnQzMihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0xMDM1NCw2ICsxMDYxNCwx
MiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgICAg
IHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIFN0cmluZ1VzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA2ODIsNiArMTA5NDgsMjggQEAgcHJpdmF0ZToKICAg
ICB7CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsK
ICAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBj
ZWxsKQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVl
VmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNNYXBPYmplY3QsIGlzTm90VHlwZShjZWxsLCBKU01hcFR5
cGUpKTsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UpCisg
ICAgeworICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7Cisg
ICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2Vs
bCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZh
bHVlKGNlbGwpLCBlZGdlLCBTcGVjU2V0T2JqZWN0LCBpc05vdFR5cGUoY2VsbCwgSlNTZXRUeXBl
KSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAg
IH0KICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIExWYWx1ZSBjZWxs
KQogICAgIHsKQEAgLTExNDUwLDYgKzExNzM4LDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBtX3N0b3JhZ2VWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGln
aEJsb2NrKSk7CiAgICAgfQorICAgIHZvaWQgc2V0TWFwQnVja2V0KE5vZGUqIG5vZGUsIExWYWx1
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fbWFwQnVja2V0VmFsdWVzLnNldChub2RlLCBMb3dl
cmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KICAgICB2b2lkIHNldERv
dWJsZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBtX2RvdWJsZVZh
bHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKQEAg
LTExNDgzLDYgKzExNzc1LDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXRTdG9yYWdl
KG1fbm9kZSwgdmFsdWUpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChMVmFsdWUgdmFs
dWUpCisgICAgeworICAgICAgICBzZXRNYXBCdWNrZXQobV9ub2RlLCB2YWx1ZSk7CisgICAgfQog
ICAgIHZvaWQgc2V0RG91YmxlKExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldERvdWJs
ZShtX25vZGUsIHZhbHVlKTsKQEAgLTExNjY2LDYgKzExOTYyLDcgQEAgcHJpdmF0ZToKICAgICBI
YXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAgSGFz
aE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hN
YXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFw
PE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX21hcEJ1Y2tldFZhbHVlczsKICAgICBIYXNoTWFw
PE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKICAgICAKICAgICAvLyBU
aGlzIGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJldmVudHMgQjMgZnJvbSBoYXZpbmcgdG8gZG8g
Q1NFIG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MjYsNiArNjI2LDUyIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxD
YWwKICAgICAgICAgfSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBBc3NlbWJseUhl
bHBlcnM6OmpzTWFwSGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKQor
eworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+KGtl
eSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2Ny
YXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlucHV0
LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7Cisg
ICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7Cisg
ICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEzKSwg
c2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQp
OworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOwor
ICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0
Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0LCBz
Y3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAgIGFk
ZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92
ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwg
MjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0z
MigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gs
IGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwgc2Ny
YXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAgIHhv
cjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1
bHQpCisgICAgdm9pZCogbWFzayA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8dWlu
dHB0cl90PihVSU5UX01BWCkpOworICAgIGFuZDY0KFRydXN0ZWRJbW1QdHIobWFzayksIGlucHV0
QW5kUmVzdWx0KTsKK30KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTYx
LDYgKzYxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJs
b2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29k
ZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAgICAgfQogICAgIH0KKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgdm9pZCBqc01hcEhhc2goR1BSUmVnIGlucHV0QW5kUmVz
dWx0LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5kaWYKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaygpIHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9CiAgICAgVk0qIHZtKCkgeyByZXR1cm4gbV92
bTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNiArMTk0LDcgQEAgdHlwZWRlZiBKU0NlbGwqIChK
SVRfT1BFUkFUSU9OICpDX0pJVE9wZQogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FU3RaWikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCwgaW50
MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0Va
KShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAq
Q19KSVRPcGVyYXRpb25fRUpzY0kpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBVbmlxdWVkU3RyaW5n
SW1wbCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9F
Q0paKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0eXBl
ZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5
cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9HKShKU0dsb2JhbE9i
amVjdCopOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0RE
KShkb3VibGUsIGRvdWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01v
ZHVsZUFuYWx5emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL01vZHVsZUFuYWx5emVyLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDcgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIE1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFs
eXplcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFy
ZWRWYXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMp
CiAgICAgOiBtX3ZtKCZleGVjLT52bSgpKQotICAgICwgbV9tb2R1bGVSZWNvcmQoZXhlYy0+dm0o
KSwgSlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUs
IGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKKyAgICAsIG1fbW9kdWxlUmVj
b3JkKGV4ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgZXhlYy0+dm0oKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9k
dWxlS2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykp
CiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFw
SW1wbC5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisKKyNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGlu
ZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPD4KK2NvbnN0IENs
YXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6c19pbmZvID0KKyAg
ICB7ICJIYXNoTWFwQnVja2V0IiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PikgfTsKK3RlbXBsYXRlPD4KK2NvbnN0IENs
YXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8g
PQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRl
IDx0eXBlbmFtZSBEYXRhPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tl
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJU
X0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9uZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2
KTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmll
cjxVbmtub3duPikgPT0gMCwgIldlIGFzc3VtZSB0aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gbWVtYmVycyBvbmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5k
VmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+
bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOwor
fQorCit0ZW1wbGF0ZTw+Citjb25zdCBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBJbXBsIiwg
bnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4pIH07Cit0ZW1wbGF0ZTw+Citjb25zdCBDbGFzc0luZm8g
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnNf
aW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3ZvaWQgSGFzaE1hcElt
cGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNo
TWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faGVhZCk7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2aXNpdG9yLmNvcHlMYXRlcih0
aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fYnVmZmVy
LmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygpKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+
Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENv
cHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0
b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hN
YXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tl
biAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgp
KSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogb2xkQnVmZmVyID0gdGhpc09iamVjdC0+
bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplSW5CeXRlcyA9IHRoaXNP
YmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBu
ZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyVHlwZSo+KHZpc2l0b3IuYWxsb2Nh
dGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOworICAgICAgICBtZW1jcHkobmV3QnVmZmVy
LCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9i
dWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVyKTsKKyAgICAgICAgdmlzaXRvci5kaWRD
b3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7CisKK3N0cnVjdCBIYXNoTWFwQnVja2V0RGF0YUtleSB7CisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+IGtleTsKK307CisKK3N0cnVjdCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
IHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiB2YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgorY2xhc3MgSGFzaE1h
cEJ1Y2tldCA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleT46OnZhbHVlLCBT
dHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVl
LCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCitw
dWJsaWM6CisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0KiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAg
SGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1h
cEJ1Y2tldD4odm0uaGVhcCkpIEhhc2hNYXBCdWNrZXQodm0sIHNlbGVjdFN0cnVjdHVyZSh2bSkp
OworICAgICAgICBidWNrZXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWJ1Y2tldC0+bmV4dCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWJ1Y2tldC0+
cHJldigpKTsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisKKyAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOworCisgICAgSGFzaE1hcEJ1Y2tldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7IH0KKworICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXROZXh0KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAg
IHsKKyAgICAgICAgbV9uZXh0LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9CisgICAgQUxX
QVlTX0lOTElORSB2b2lkIHNldFByZXYoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisg
ICAgeworICAgICAgICBtX3ByZXYuc2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRLZXkoVk0mIHZtLCBKU1ZhbHVlIGtleSkKKyAgICB7Cisg
ICAgICAgIG1fZGF0YS5rZXkuc2V0KHZtLCB0aGlzLCBrZXkpOworICAgIH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFs
dWU+Ojp0eXBlIHNldFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAg
IG1fZGF0YS52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6dmFsdWU+Ojp0eXBl
IHNldFZhbHVlKFZNJiwgSlNWYWx1ZSkgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUg
a2V5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmtleS5nZXQoKTsgfQorCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZSwg
SlNWYWx1ZT46OnR5cGUgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0
YS52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQq
IG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVk
OyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldERlbGV0ZWQoYm9vbCBkZWxldGVkKSB7IG1f
ZGVsZXRlZCA9IGRlbGV0ZWQ7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZLZXko
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBt
X2RhdGEpICsgT0JKRUNUX09GRlNFVE9GKERhdGEsIGtleSk7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlLCBwdHJk
aWZmX3Q+Ojp0eXBlIG9mZnNldE9mVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBtX2RhdGEpICsgT0JKRUNUX09GRlNFVE9GKERhdGEs
IHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0YSBtX2RhdGE7CisgICAgV3JpdGVC
YXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1fbmV4dDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1
Y2tldD4gbV9wcmV2OworICAgIGJvb2wgbV9kZWxldGVkIHsgZmFsc2UgfTsKKworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIEJ1Y2tldFR5cGU+CitjbGFzcyBIYXNoTWFwQnVmZmVyIHsKK3B1Ymxp
YzoKKyAgICBIYXNoTWFwQnVmZmVyKCkgPSBkZWxldGU7CisKKyAgICBzdGF0aWMgc2l6ZV90IGFs
bG9jYXRpb25TaXplKHVpbnQzMl90IGNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNh
cGFjaXR5ICogc2l6ZW9mKEJ1Y2tldFR5cGUqKTsKKyAgICB9CisKKyAgICBCdWNrZXRUeXBlKiog
YnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QnVja2V0
VHlwZSoqPih0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1ZmZlciogY3JlYXRl
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1aW50MzJfdCBjYXBhY2l0
eSkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlv
blNpemUoY2FwYWNpdHkpOworICAgICAgICB2b2lkKiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAg
RGVmZXJHQ0ZvckFXaGlsZSBkZWZlcih2bS5oZWFwKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRy
eUFsbG9jYXRlU3RvcmFnZShvd25lciwgYWxsb2NhdGlvblNpemUsICZkYXRhKSkgeworICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1ZmZlciogYnVmZmVy
ID0gc3RhdGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlcio+KGRhdGEpOworICAgICAgICBtZW1zZXQoYnVm
ZmVyLCAtMSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0K
KworfTsKKworQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBhcmVLZXlzRXF1YWwoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICAvLyBXZSB3YW50ICswIGFuZCAt
MCB0byBiZSBjb21wYXJlZCB0byB0cnVlIGhlcmUuIHNhbWVWYWx1ZSgpIGl0c2VsZiBkb2Vzbid0
CisgICAgLy8gZ3VhcmFudGVlIHRoYXQsIGhvd2V2ZXIsIHdlIG5vcm1hbGl6ZSBhbGwga2V5cyBi
ZWZvcmUgY29tcGFyaW5nIGFuZCBzdG9yaW5nCisgICAgLy8gdGhlbSBpbiB0aGUgbWFwLiBUaGUg
bm9ybWFsaXphdGlvbiB3aWxsIGNvbnZlcnQgLTAuMCBhbmQgMC4wIHRvIHRoZSBpbnRlZ2VyCisg
ICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIDAuCisgICAgcmV0dXJuIHNhbWVWYWx1ZShleGVjLCBh
LCBiKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVl
IGtleSkKK3sKKyAgICBpZiAoIWtleS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4ga2V5Owor
CisgICAgaWYgKGtleS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBkb3Vi
bGUgZCA9IGtleS5hc0RvdWJsZSgpOworICAgIGlmIChzdGQ6OmlzbmFuKGQpKQorICAgICAgICBy
ZXR1cm4ga2V5OworCisgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgIGlmIChp
ID09IGQpIHsKKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyAtMCwgd2UgY29udmVydCBpdCB0byBw
b3NpdGl2ZSB6ZXJvLgorICAgICAgICAvLyBXaGVuIGEga2V5IGlzIHRoZSBkb3VibGUgcmVwcmVz
ZW50YXRpb24gZm9yIGFuIGludGVnZXIsIHdlIGNvbnZlcnQgaXQgdG8gYW4gaW50ZWdlci4KKyAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGkpOworICAgIH0KKyAgICAvLyBUaGlzIG1lYW5zIGtleSBp
cyBkZWZpbml0ZWx5IG5vdCBuZWdhdGl2ZSB6ZXJvLCBhbmQgaXQncyBkZWZpbml0ZWx5IG5vdCBh
IGRvdWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiAKKyAgICByZXR1cm4ga2V5Owor
fQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG5vcm1hbGl6
ZU1hcEtleSh2YWx1ZSkgPT0gdmFsdWUsICJXZSBleHBlY3Qgbm9ybWFsaXplZCB2YWx1ZXMgZmxv
d2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uIik7CisKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAodmFsdWUuaXNEb3VibGUoKSkgeworICAgICAgICBk
b3VibGUgZCA9IHZhbHVlLmFzRG91YmxlKCk7CisgICAgICAgIGlmICghc3RkOjppc25hbihkKSkg
eworICAgICAgICAgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+KGQpOworICAgICAgICAgICAg
aWYgKGkgPT0gZCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGpzTnVtYmVyKGkpOworICAgICAg
ICB9CisgICAgfQorICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIEpTU3RyaW5n
KiBzdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSk7CisgICAgICAgIGNvbnN0IFN0cmluZyYgd3RmU3Ry
aW5nID0gc3RyaW5nLT52YWx1ZShleGVjKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgICAgcmV0dXJu
IHd0ZlN0cmluZy5pbXBsKCktPmhhc2goKTsKKyAgICB9CisgICAgdWludDY0X3QgcmF3VmFsdWUg
PSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIC8vIEZJWE1FOiB3cml0ZSBvdXQgb3VyIG93
biBpbnQgaGFzaCBmdW5jdGlvbiBzbyB3ZSdyZSBub3QgZGVwZW5kZW50IG9uIFdURidzIGhhc2gg
ZnVuY3Rpb24uCisgICAgcmV0dXJuIFdURjo6aW50SGFzaChyYXdWYWx1ZSk7Cit9CisKK3RlbXBs
YXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBJbXBsIDogcHVi
bGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hN
YXBCdWZmZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBCdWZmZXJUeXBlOworCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShW
TSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUu
Z2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0
VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQs
IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSwgU3RydWN0
dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2bS5oYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwSW1wbCogY3JlYXRlKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpLCAiV2UgYXNz
dW1lIHRoaXMgdG8gYmUgdHJ1ZSBpbiB0aGUgREZHIGFuZCBGVEwgSklULiIpOworCisgICAgICAg
IEhhc2hNYXBJbXBsKiBpbXBsID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcElt
cGw+KHZtLmhlYXApKSBIYXNoTWFwSW1wbCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAg
ICAgIGltcGwtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZp
c2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgSGFzaE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9z
aXplKDApCisgICAgICAgICwgbV9kZWxldGVDb3VudCgwKQorICAgICAgICAsIG1fY2FwYWNpdHko
NCkKKyAgICB7CisgICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmdldCgpLT5idWZmZXIoKTsKKyAgICB9
CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAg
IHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKKyAgICAgICAgbWFrZUFuZFNldE5ld0J1ZmZl
cihleGVjLCB2bSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgbV9oZWFkLnNldCh2bSwgdGhpcywgSGFzaE1h
cEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSkpOworICAgICAgICBtX3RhaWwuc2V0KHZtLCB0aGlzLCBI
YXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisKKyAgICAgICAgbV9oZWFkLT5zZXROZXh0
KHZtLCBtX3RhaWwuZ2V0KCkpOworICAgICAgICBtX3RhaWwtPnNldFByZXYodm0sIG1faGVhZC5n
ZXQoKSk7CisgICAgICAgIG1faGVhZC0+c2V0RGVsZXRlZCh0cnVlKTsKKyAgICAgICAgbV90YWls
LT5zZXREZWxldGVkKHRydWUpOworCisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXRU
eXBlKiBlbXB0eVZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFz
aE1hcEJ1Y2tldFR5cGUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0xKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0VtcHR5KEhhc2hNYXBCdWNrZXRUeXBlKiBi
dWNrZXQpCisgICAgeworICAgICAgICByZXR1cm4gYnVja2V0ID09IGVtcHR5VmFsdWUoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUqIGRlbGV0ZWRWYWx1ZSgpCisgICAg
eworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBCdWNrZXRUeXBlKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PigtMykpOworICAgIH0KKworICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGJvb2wgaXNEZWxldGVkKEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCisgICAgeworICAgICAg
ICByZXR1cm4gYnVja2V0ID09IGRlbGV0ZWRWYWx1ZSgpOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXkpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICB1
aW50MzJfdCBoYXNoID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBrZXkpOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIGZpbmRCdWNrZXQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAga2V5ID0gbm9ybWFsaXplTWFw
S2V5KGtleSk7CisgICAgICAgIHJldHVybiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1h
bGl6ZWQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFs
dWUgZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBpZiAo
SGFzaE1hcEJ1Y2tldFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSkpCisgICAg
ICAgICAgICByZXR1cm4gKCpidWNrZXQpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gISFmaW5kQnVja2V0KGV4
ZWMsIGtleSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgIHsKKyAg
ICAgICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CisKKyAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAg
dWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0sIGtleSkgJiBtYXNrOworICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAg
d2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgICAgIGlmICghaXNEZWxldGVkKGJ1
Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVja2V0LT5rZXkoKSkpIHsKKyAgICAg
ICAgICAgICAgICBidWNrZXQtPnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAm
IG1hc2s7CisgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisK
KyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5ld0VudHJ5ID0gbV90YWlsLmdldCgpOworICAg
ICAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRLZXko
dm0sIGtleSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOworICAgICAg
ICBuZXdFbnRyeS0+c2V0RGVsZXRlZChmYWxzZSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBl
KiBuZXdUYWlsID0gSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIG1fdGFp
bC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOworICAgICAgICBuZXdUYWlsLT5zZXRQcmV2KHZtLCBu
ZXdFbnRyeSk7CisgICAgICAgIG5ld1RhaWwtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAgIG5l
d0VudHJ5LT5zZXROZXh0KHZtLCBuZXdUYWlsKTsKKyAgICAgICAgdWludDMyX3QgbmV3U2l6ZSA9
ICsrbV9zaXplOworICAgICAgICBpZiAoMipuZXdTaXplID4gbV9jYXBhY2l0eSkKKyAgICAgICAg
ICAgIHJlaGFzaChleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVtb3Zl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBIYXNoTWFwQnVj
a2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAgICAgaWYgKCFi
dWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGltcGwgPSAqYnVja2V0OworICAg
ICAgICBpbXBsLT5uZXh0KCktPnNldFByZXYodm0sIGltcGwtPnByZXYoKSk7CisgICAgICAgIGlt
cGwtPnByZXYoKS0+c2V0TmV4dCh2bSwgaW1wbC0+bmV4dCgpKTsKKyAgICAgICAgaW1wbC0+c2V0
RGVsZXRlZCh0cnVlKTsKKworICAgICAgICAqYnVja2V0ID0gZGVsZXRlZFZhbHVlKCk7CisKKyAg
ICAgICAgbV9kZWxldGVDb3VudCsrOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBS
RUxFQVNFX0FTU0VSVChtX3NpemUgPj0gbV9kZWxldGVDb3VudCk7CisgICAgICAgIHJldHVybiBt
X3NpemUgLSBtX2RlbGV0ZUNvdW50OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBj
bGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OworICAgICAgICBtX3NpemUgPSAwOworICAgICAgICBtX2RlbGV0ZUNvdW50ID0gMDsKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQgPSBtX2hlYWQuZ2V0KCk7CisgICAgICAgIEhhc2hN
YXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIHRhaWwgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgIT0g
dGFpbCkgeworICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5leHQgPSBidWNrZXQtPm5l
eHQoKTsKKyAgICAgICAgICAgIC8vIFdlIHJlc3RhcnQgZWFjaCBpdGVyYXRvciBieSBwb2ludGlu
ZyBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgICAgIGJ1Y2tldC0+c2V0TmV4
dCh2bSwgaGVhZCk7CisgICAgICAgICAgICBidWNrZXQgPSBuZXh0OworICAgICAgICB9CisgICAg
ICAgIG1faGVhZC0+c2V0TmV4dCh2bSwgbV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90YWlsLT5z
ZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgICAgICBtX2NhcGFjaXR5ID0gNDsKKyAgICAg
ICAgbWFrZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBzaXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldFR5cGUqKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnVmZmVyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+LCBtX2J1ZmZl
cik7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhcGFjaXR5KCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1
Y2tldFR5cGU+LCBtX2NhcGFjaXR5KTsKKyAgICB9CisKKyAgICBIYXNoTWFwQnVja2V0VHlwZSog
aGVhZCgpIHsgcmV0dXJuIG1faGVhZC5nZXQoKTsgfQorICAgIEhhc2hNYXBCdWNrZXRUeXBlKiB0
YWlsKCkgeyByZXR1cm4gbV90YWlsLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgQUxXQVlTX0lO
TElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFs
aXplZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsK
KyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1
aW50MzJfdCBpbmRleCA9IGhhc2ggJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoq
IGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVj
a2V0ID0gYnVmZmVyW2luZGV4XTsKKworICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkg
eworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVLZXlzRXF1YWwoZXhl
Yywga2V5LCBidWNrZXQtPmtleSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsg
aW5kZXg7CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAg
ICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHsK
KyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIG1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5ICog
MjsKKyAgICAgICAgbWFrZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGl0ZXIgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldFR5cGUqIGVuZCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgY29uc3QgdWludDMy
X3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fY2Fw
YWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiog
YnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgewor
ICAgICAgICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0sIGl0ZXItPmtl
eSgpKSAmIG1hc2s7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzY29wZS5leGNl
cHRpb24oKSwgIkFsbCBrZXlzIHNob3VsZCBhbHJlYWR5IGJlIGhhc2hlZCBiZWZvcmUsIHNvIHRo
aXMgc2hvdWxkIG5vdCB0aHJvdyBiZWNhdXNlIGl0IHdvbid0IHJlc29sdmUgcm9wZXMuIik7Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9
IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAg
ICAgICAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2luZGV4XSA9IGl0ZXI7CisgICAg
ICAgICAgICBpdGVyID0gaXRlci0+bmV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9p
ZCBtYWtlQW5kU2V0TmV3QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKworICAgICAg
ICBIYXNoTWFwQnVmZmVyVHlwZSogYnVmZmVyID0gSGFzaE1hcEJ1ZmZlclR5cGU6OmNyZWF0ZShl
eGVjLCB2bSwgdGhpcywgbV9jYXBhY2l0eSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVy
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2J1ZmZlci5zZXQodm0sIHRoaXMs
IGJ1ZmZlcik7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAgICAgICAgICAg
IEFTU0VSVChpc0VtcHR5KHRoaXMtPmJ1ZmZlcigpW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1faGVhZDsKKyAgICBXcml0ZUJh
cnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1fdGFpbDsKKyAgICBDb3B5QmFycmllcjxIYXNoTWFw
QnVmZmVyVHlwZT4gbV9idWZmZXI7CisgICAgdWludDMyX3QgbV9zaXplOworICAgIHVpbnQzMl90
IG1fZGVsZXRlQ291bnQ7CisgICAgdWludDMyX3QgbV9jYXBhY2l0eTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2lj
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIGVudW0gSlNfRVhQT1JU
X1BSSVZBVEUgSW50cmluc2ljIHsKICAgICBJc1JlZ0V4cE9iamVjdEludHJpbnNpYywKICAgICBJ
c1R5cGVkQXJyYXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2Fs
bEludHJpbnNpYywKKyAgICBKU01hcEdldEludHJpbnNpYywKKyAgICBKU01hcEhhc0ludHJpbnNp
YywKKyAgICBKU1NldEhhc0ludHJpbnNpYywKIAogICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgog
ICAgIFR5cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw2
ICs2MDYsOSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTQ2VsbCogYSwgCiAKIGJv
b2wgaXNUaGlzVmFsdWVBbHRlcmVkKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0KTsKIAorLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIu
aW8vZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZQorYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBhLCBKU1ZhbHVlIGIpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpT
Q0pTVmFsdWVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU4
LDYgKzEwNTgsMjIgQEAgQUxXQVlTX0lOTElORSBib29sIGlzVGhpc1ZhbHVlQWx0ZXJlZChjbwog
ICAgIHJldHVybiB0cnVlOwogfQogCisvLyBTZWUgc2VjdGlvbiA3LjIuOTogaHR0cHM6Ly90YzM5
LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlCitBTFdBWVNfSU5MSU5FIGJvb2wgc2Ft
ZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgaWYg
KCFhLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVj
LCBhLCBiKTsKKyAgICBpZiAoIWIuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGRvdWJsZSB4ID0gYS5hc051bWJlcigpOworICAgIGRvdWJsZSB5ID0gYi5hc051bWJlcigp
OworICAgIGJvb2wgeElzTmFOID0gc3RkOjppc25hbih4KTsKKyAgICBib29sIHlJc05hTiA9IHN0
ZDo6aXNuYW4oeSk7CisgICAgaWYgKHhJc05hTiB8fCB5SXNOYU4pCisgICAgICAgIHJldHVybiB4
SXNOYU4gJiYgeUlzTmFOOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpID09
IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gSlNWYWx1ZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NDEsNyArNjQxLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZt
LnByb3BlcgogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5SZWZsZWN0LCByZWZsZWN0T2JqZWN0LCBEb250RW51bSk7CiAKICAgICBtX21vZHVsZUxv
YWRlclN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1
cmUodm0sIHRoaXMsIG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9tb2R1
bGVMb2FkZXIuc2V0KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKHZtLCB0aGlzLCBt
X21vZHVsZUxvYWRlclN0cnVjdHVyZS5nZXQoKSkpOworICAgIG1fbW9kdWxlTG9hZGVyLnNldCh2
bSwgdGhpcywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZShnbG9iYWxFeGVjKCksIHZtLCB0aGlzLCBt
X21vZHVsZUxvYWRlclN0cnVjdHVyZS5nZXQoKSkpOwogICAgIGlmIChPcHRpb25zOjpleHBvc2VJ
bnRlcm5hbE1vZHVsZUxvYWRlcigpKQogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlv
bih2bSwgdm0ucHJvcGVydHlOYW1lcy0+TG9hZGVyLCBtX21vZHVsZUxvYWRlci5nZXQoKSwgRG9u
dEVudW0pOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTTWFwLmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKKyNpbmNs
dWRlICJDb21tb25JZGVudGlmaWVycy5oIgogI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5o
IgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5o
IgogI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCiAKQEAgLTM3LDY3ICs0Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7
Ci0gICAgdGhpc09iamVjdC0+SlNNYXA6On5KU01hcCgpOwotfQotCi1zaXplX3QgSlNNYXA6OmVz
dGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganND
YXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgc2l6ZV90IG1hcERhdGFTaXplID0gdGhpc09iamVjdC0+
bV9tYXBEYXRhLmNhcGFjaXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRT
aXplKGNlbGwpICsgbWFwRGF0YVNpemU7Ci19Ci0KIFN0cmluZyBKU01hcDo6dG9TdHJpbmdOYW1l
KGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFs
KCJPYmplY3QiKTsKIH0KIAotdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwg
dmlzaXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAg
ICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nh
c3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9r
ZW4pOwotfQotCi1ib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
LXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Ci19Ci0KLXNpemVf
dCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5z
aXplKGV4ZWMpOwotfQotCi1KU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5
KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlz
LCBrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAg
ICBtX21hcERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywg
a2V5KTsKLX0KLQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMDggKzI2LDQ5IEBACiAjaWZuZGVmIEpTTWFwX2gKICNk
ZWZpbmUgSlNNYXBfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKKyNpbmNs
dWRlICJNYXBCYXNlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJNYXBEYXRh
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi1jbGFzcyBK
U01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU01hcCA6IHB1Ymxp
YyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+IHsKKyAg
ICB0eXBlZGVmIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pj4gQmFzZTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7
Ci0KICAgICBmcmllbmQgY2xhc3MgSlNNYXBJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJraW5n
IGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZl
IGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFzcyBF
bnRyeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5
OwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKLQotICAgIHB1YmxpYzoK
LSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25z
dCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hp
bGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0
b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCog
b3duZXIsIEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0s
IG93bmVyLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3Jp
dGVCYXJyaWVyKEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRX
aXRob3V0V3JpdGVCYXJyaWVyKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZh
bHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBKU01hcEl0ZXJhdG9yPiBNYXBEYXRhOwot
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNN
YXAodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1
ZSBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5n
ZXQoZXhlYywga2V5KTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVl
KTsKLSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3Rh
dGUqLCBKU1ZhbHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVjU3RhdGUq
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUq
KTsKLSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSwgdmFsdWUpOworICAgIH0KIAog
cHJpdmF0ZToKICAgICBKU01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMpCiAg
ICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3Rh
dGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFj
a2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwotCi0gICAg
TWFwRGF0YSBtX21hcERhdGE7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01h
cEl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKKyNpbmNsdWRlICJDb21t
b25JZGVudGlmaWVycy5oIgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiSlNNYXAuaCIKQEAgLTQxLDYgKzQ0LDcgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBt
X21hcC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJdGVyYXRvcih2bSwg
bV9tYXAtPmltcGwoKS0+aGVhZCgpKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00OSw2ICs1Myw3
IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBBU1NFUlRf
R0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9tYXApOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIpOwog
fQogCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjcsOSBAQCBKU1ZhbHVl
IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTTWFwSXRlcmF0b3IqIEpTTWFw
SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNsb25lID0gSlNN
YXBJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmpl
Y3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9tYXAuZ2V0KCksIG1fa2luZCk7Ci0gICAg
Y2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CisgICAgYXV0byBjbG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwg
bV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQoKSk7CiAgICAg
cmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPiBIYXNoTWFwQnVja2V0OwogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25G
aW5hbE9iamVjdCBCYXNlOwogCkBAIC01MSw1MiArNTIsNjIgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIGFk
dmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQ
YWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0
KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgpOworICAg
ICAgICBpZiAoIXByZXYpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldCogYnVja2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChidWNr
ZXQgJiYgYnVja2V0LT5kZWxldGVkKCkpIHsKKyAgICAgICAgICAgIHByZXYgPSBidWNrZXQ7Cisg
ICAgICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgbnVsbHB0
cik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBzZXRJ
dGVyYXRvcihleGVjLT52bSgpLCBidWNrZXQpOyAvLyBXZSBrZWVwIG1faXRlciBvbiB0aGUgbGFz
dCB2YWx1ZS4KKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisgICAgYm9vbCBuZXh0KEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBIYXNoTWFwQnVj
a2V0KiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVyYXRl
VmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2YWx1
ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJhdGVL
ZXkpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBi
dWNrZXQtPmtleSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBh
aXIoY2FsbEZyYW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZSA9
IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT52YWx1ZSgpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFsdWUoSlNWYWx1ZSYg
a2V5LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6Oktl
eVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0
b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0
ZXIoZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGtleSA9IHBhaXIua2V5OwotICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7
CisgICAgICAgIGtleSA9IGJ1Y2tldC0+a2V5KCk7CisgICAgICAgIHZhbHVlID0gYnVja2V0LT52
YWx1ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaCgp
Ci0gICAgewotICAgICAgICBtX2l0ZXJhdG9yLmZpbmlzaCgpOwotICAgIH0KLQogICAgIEl0ZXJh
dGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEpTVmFsdWUgaXRl
cmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmdldCgpOyB9CiAgICAgSlNNYXBJdGVy
YXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JE
YXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2l0ZXJhdG9yOwot
ICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAg
IEpTTWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNNYXAqLCBJdGVy
YXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAs
IG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fbWFwRGF0YS5jcmVhdGVJdGVyYXRvckRhdGEo
dGhpcykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeyB9CisKKyAgICB2b2lkIHNldEl0
ZXJhdG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQogICAgIHsKKyAgICAgICAgbV9p
dGVyLnNldE1heUJlTnVsbCh2bSwgdGhpcywgYnVja2V0KTsKICAgICB9CiAKICAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKQEAgLTEwNCw3ICsx
MTUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAgSlNN
YXA6Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxI
YXNoTWFwQnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RB
VElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNw
cAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
b2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSArNTUsMTQgQEAgSlNNb2R1
bGVMb2FkZXI6OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwgUwogewogfQogCi12b2lkIEpTTW9kdWxl
TG9hZGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QpCit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERp
cmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBKU01hcDo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKSk7CisgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3Jl
YXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICBSRUxFQVNF
X0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmll
cjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBtYXApOwogfQogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxl
TG9hZGVyLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBw
dWJsaWM6CiAgICAgICAgIFJlYWR5ID0gNiwKICAgICB9OwogCi0gICAgc3RhdGljIEpTTW9kdWxl
TG9hZGVyKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNNb2R1bGVMb2FkZXIqIGNyZWF0ZShFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU01vZHVsZUxvYWRlciogb2JqZWN0ID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVMb2FkZXI+KHZtLmhlYXApKSBKU01v
ZHVsZUxvYWRlcih2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlv
bih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVj
LCB2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKQEAg
LTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwg
SlNWYWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3JkLCBKU1ZhbHVlIGluaXRpYXRvcik7CiAK
IHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
KTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJiwgSlNHbG9iYWxPYmpl
Y3QqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA1MzA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTcgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZGVzdHJv
eShKU0NlbGwqIGNlbAogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlUmVjb3JkOjp+SlNNb2R1bGVS
ZWNvcmQoKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZt
KQordm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhl
cml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCBBU0NJSUxpdGVyYWwoInJlZ2lzdHJ5RW50cnkiKSksIGpzVW5kZWZpbmVkKCkpOwogICAg
IHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgi
ZXZhbHVhdGVkIikpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIG1fZGVwZW5kZW5jaWVzTWFw
LnNldCh2bSwgdGhpcywgSlNNYXA6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCktPm1hcFN0cnVj
dHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+bWFw
U3RydWN0dXJlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7Cisg
ICAgbV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwogICAgIHB1dERpcmVjdCh2
bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZGVwZW5kZW5jaWVz
TWFwIikpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjA1MzA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29y
a2luZyBjb3B5KQpAQCAtODcsMTAgKzg3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U01vZHVsZVJlY29yZCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgY29u
c3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxl
RW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgc3RhdGljIEpTTW9kdWxlUmVjb3Jk
KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUs
IGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJp
YWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgSlNNb2R1
bGVSZWNvcmQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVS
ZWNvcmQ+KHZtLmhlYXApKSBKU01vZHVsZVJlY29yZCh2bSwgc3RydWN0dXJlLCBtb2R1bGVLZXks
IHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKTsKLSAgICAg
ICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlz
aENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApA
QCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmlu
aXNoQ3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZN
Jik7CiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogZ2V0TW9kdWxlTmFtZXNwYWNlKEV4
ZWNTdGF0ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3Bw
CShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDU5ICszNyw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiBjb25zdCBDbGFzc0luZm8gSlNTZXQ6OnNfaW5mbyA9IHsgIlNldCIsICZCYXNlOjpzX2luZm8s
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTZXQpIH07CiAKLXZvaWQgSlNTZXQ6OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQotewotICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4o
Y2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNTZXQ6On5KU1NldCgpOwotfQotCiBTdHJpbmcgSlNT
ZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopCiB7CiAgICAgcmV0
dXJuIEFTQ0lJTGl0ZXJhbCgiT2JqZWN0Iik7CiB9CiAKLXNpemVfdCBKU1NldDo6ZXN0aW1hdGVk
U2l6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNT
ZXQqPihjZWxsKTsKLSAgICBzaXplX3Qgc2V0RGF0YVNpemUgPSB0aGlzT2JqZWN0LT5tX3NldERh
dGEuY2FwYWNpdHlJbkJ5dGVzKCk7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2Vs
bCkgKyBzZXREYXRhU2l6ZTsKLX0KLQotdm9pZCBKU1NldDo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7Ci0gICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS52aXNp
dENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpTU2V0Ojpjb3B5QmFja2luZ1N0
b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikK
LXsKLSAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAg
ICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRv
ciwgdG9rZW4pOwotfQotCi1ib29sIEpTU2V0OjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IHZhbHVlKQotewotICAgIHJldHVybiBtX3NldERhdGEuY29udGFpbnMoZXhlYywgdmFsdWUpOwot
fQotCi1zaXplX3QgSlNTZXQ6OnNpemUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBt
X3NldERhdGEuc2l6ZShleGVjKTsKLX0KLQotdm9pZCBKU1NldDo6YWRkKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBtX3NldERhdGEuc2V0KGV4ZWMsIHRoaXMsIHZhbHVl
LCB2YWx1ZSk7Ci19Ci0KLXZvaWQgSlNTZXQ6OmNsZWFyKEV4ZWNTdGF0ZSopCi17Ci0gICAgbV9z
ZXREYXRhLmNsZWFyKCk7Ci19Ci0KLWJvb2wgSlNTZXQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5yZW1vdmUoZXhlYywgdmFs
dWUpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDEwMyArMjYsNDYgQEAKICNpZm5kZWYgSlNTZXRfaAogI2Rl
ZmluZSBKU1NldF9oCiAKKyNpbmNsdWRlICJNYXBCYXNlLmgiCiAjaW5jbHVkZSAiSlNEZXN0cnVj
dGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLWNsYXNzIEpT
U2V0IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTU2V0IDogcHVibGlj
IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+IHsKKyAgICB0eXBl
ZGVmIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+IEJhc2U7CiBw
dWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCiAgICAgZnJp
ZW5kIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMg
ZXhwZWN0IEVudHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAv
LyBmaWVsZHMgYmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgY2xhc3MgRW50cnkgewotICAg
IHByaXZhdGU6Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2tleTsKLQotICAgIHB1
YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmbV9rZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXko
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIGtleSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9rZXkuc2V0KHZtLCBvd25lciwga2V5KTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgc2V0S2V5V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlIGtleSkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9rZXkuc2V0V2l0aG91dFdyaXRlQmFycmllcihrZXkpOwotICAgICAgICB9
Ci0KLSAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpCi0g
ICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2tleS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHR5cGVk
ZWYgTWFwRGF0YUltcGw8RW50cnksIEpTU2V0SXRlcmF0b3I+IFNldERhdGE7Ci0KICAgICBERUNM
QVJFX0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
CiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8o
KSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBw
cm90b3R5cGUsIFR5cGVJbmZvKEpTU2V0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSlNTZXQqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTZXQ+KHZtLmhlYXApKSBKU1NldCh2bSwgc3Ry
dWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVj
LT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSk7CiAgICAg
fQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6ZV90IHNpemUo
RXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoRXhlY1N0YXRlKiwg
SlNWYWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJlbW92ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlKTsKLQogcHJpdmF0ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAg
LCBtX3NldERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCop
OwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwg
Q29weVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVj
dCosIEV4ZWNTdGF0ZSopOwotCi0gICAgU2V0RGF0YSBtX3NldERhdGE7CiB9OwogCiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJ
dGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAgdm9pZCBKU1NldEl0
ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKICAgICBtX3NldC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJ
dGVyYXRvcih2bSwgbV9zZXQtPmltcGwoKS0+aGVhZCgpKTsKIH0KIAogdm9pZCBKU1NldEl0ZXJh
dG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBA
IC00OSw2ICs1MCw3IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwK
ICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAg
QmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9zZXQpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX2l0ZXIpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjQs
OSBAQCBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTU2V0SXRl
cmF0b3IqIEpTU2V0SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRv
IGNsb25lID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgp
LT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1f
a2luZCk7Ci0gICAgY2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwg
ZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBt
X3NldC5nZXQoKSwgbV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5n
ZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1NldEl0ZXJhdG9y
IDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tldDxI
YXNoTWFwQnVja2V0RGF0YUtleT4gSGFzaE1hcEJ1Y2tldDsKIHB1YmxpYzoKICAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIApAQCAtNTIsNDYgKzUzLDU5IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVj
a2V0KiBhZHZhbmNlSXRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAgICBXVEY6Oktl
eVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0
b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogcHJldiA9IG1faXRlci5nZXQo
KTsKKyAgICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOworICAgICAgICB3aGls
ZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKSB7CisgICAgICAgICAgICBwcmV2ID0gYnVj
a2V0OworICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCks
IG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAg
ICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgYnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0ZXIgb24g
dGhlIGxhc3QgdmFsdWUuCisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorCisgICAgYm9v
bCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBI
YXNoTWFwQnVja2V0KiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFi
dWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgaWYgKG1fa2luZCA9
PSBJdGVyYXRlVmFsdWUgfHwgbV9raW5kID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2YWx1
ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPmtleSgpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoY2FsbEZyYW1lLCBwYWlyLmtl
eSwgcGFpci5rZXkpOworICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGV4ZWMsIGJ1Y2tl
dC0+a2V5KCksIGJ1Y2tldC0+a2V5KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAK
LSAgICB2b2lkIGZpbmlzaCgpCi0gICAgewotICAgICAgICBtX2l0ZXJhdG9yLmZpbmlzaCgpOwot
ICAgIH0KLQogICAgIEl0ZXJhdGlvbktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsg
fQogICAgIEpTVmFsdWUgaXRlcmF0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmdldCgp
OyB9CiAgICAgSlNTZXRJdGVyYXRvciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU1NldDo6
U2V0RGF0YTo6SXRlcmF0b3JEYXRhKiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICZtX2l0ZXJhdG9yOwotICAgIH0KLQogcHJpdmF0ZToKLSAgICBKU1NldEl0ZXJhdG9yKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0
aW9uS2luZCBraW5kKQorICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNTZXQqLCBJdGVyYXRpb25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQotICAgICAgICAsIG1faXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fc2V0RGF0YS5j
cmVhdGVJdGVyYXRvckRhdGEodGhpcykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCiAgICAgewog
ICAgIH0KIAorICAgIHZvaWQgc2V0SXRlcmF0b3IoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNr
ZXQpCisgICAgeworICAgICAgICBtX2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQp
OyAKKyAgICB9CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiwgSlNTZXQqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2Fs
bEZyYW1lKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3Nl
dDsKLSAgICBKU1NldDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3Jp
dGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1faXRlcjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2lu
ZDsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVy
YXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNp
b24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDEwIEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAg
ICAgTW9kdWxlRW52aXJvbm1lbnRUeXBlLAogICAgIFJlZ0V4cE9iamVjdFR5cGUsCiAgICAgUHJv
eHlPYmplY3RUeXBlLAorICAgIEpTTWFwVHlwZSwKKyAgICBKU1NldFR5cGUsCiAKLSAgICBMYXN0
SlNDT2JqZWN0VHlwZSA9IFByb3h5T2JqZWN0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlwZSA9
IEpTTWFwVHlwZSwKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU1R5cGUpID09IHNpemVv
Zih1aW50OF90KSwgc2l6ZW9mX2pzdHlwZV9pc19vbmVfYnl0ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCisKKyNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK3ZvaWQgTWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT46
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBNYXBCYXNlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TWFwQmFzZSo+KGNlbGwpOworICAg
IEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fbWFwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hN
YXBCdWNrZXRUeXBlPgorc2l6ZV90IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+Ojplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogY2VsbCkKK3sKKyAgICAvLyBGSVhNRToKKyAgICByZXR1cm4gQmFzZTo6
ZXN0aW1hdGVkU2l6ZShjZWxsKTsKK30KKwordGVtcGxhdGUgY2xhc3MgTWFwQmFzZTxIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+PjsKK3RlbXBsYXRlIGNsYXNzIE1hcEJh
c2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OworICAgCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIYXNoTWFwSW1w
bC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+CitjbGFzcyBNYXBCYXNlIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5
cGU+IEhhc2hNYXBJbXBsOworICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworcHVi
bGljOgorCisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0VHlwZSBCdWNrZXRUeXBlOworCisgICAg
QUxXQVlTX0lOTElORSBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbWFwLT5zaXplKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFw
LT5oYXMoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXIo
RXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgbV9tYXAtPmNsZWFyKGV4ZWMpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+cmVtb3ZlKGV4ZWMsIGtleSk7
CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNr
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX21hcC0+ZmluZEJ1Y2tldChleGVjLCBrZXksIGhhc2gpOworICAgIH0K
KworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZIYXNoTWFwSW1wbCgpCisgICAgeworICAg
ICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+LCBt
X21hcCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwSW1wbCogaW1wbCgpIHsg
cmV0dXJuIG1fbWFwLmdldCgpOyB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAg
IEhhc2hNYXBJbXBsKiBpbXBsID0gSGFzaE1hcEltcGw6OmNyZWF0ZShleGVjLCB2bSk7CisgICAg
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1fbWFwLnNldCh2bSwgdGhpcywgaW1wbCk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgTWFwQmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBlc3Rp
bWF0ZWRTaXplKEpTQ2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwSW1wbD4gbV9tYXA7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsOSArNjIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxG
dW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSog
bWFwU3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUo
ZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwot
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Cisg
ICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7Cisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4
ZWMsIG1hcFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBNYXBJdGVyYXRvcgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVy
YXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNl
KSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVl
KSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTQgKzcwLDEzIEBA
IHZvaWQgTWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogICAgIEpTQ19OQVRJ
VkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBt
YXBQcm90b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFBy
b3RvRnVuY0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBE
b250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04o
dm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAg
ICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldElu
dHJpbnNpYyk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwg
MSwgSlNNYXBIYXNJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51
bSwgMik7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5j
S2V5cywgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUo
KSwgbWFwUHJvdG9GdW5jVmFsdWVzLCBEb250RW51bSwgMCk7CiAKLSAgICAvLyBQcml2YXRlIGdl
dCAvIHNldCBvcGVyYXRpb25zLgotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCks
IG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lD
X0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFt
ZXMoKS5nZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01h
cEdldEludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFw
UHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0g
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMt
PmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVu
Y0VudHJpZXMpOwpAQCAtOTMsMTYgKzkyLDIxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFw
KiBnZXRNYXAoQ2FsbEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNP
YmplY3QoKSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAg
ICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJv
cihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
Ci0gICAgSlNNYXAqIG1hcCA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAg
IGlmICghbWFwKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbWFwOworCisgICAgaWYg
KExJS0VMWSh0aGlzVmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKQorICAgICAg
ICByZXR1cm4ganNDYXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5v
bi1NYXAgb2JqZWN0IikpOworICAgIHJldHVybiBudWxscHRyOworfQorCitFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IEpTVmFsdWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwo
KS0+dHlwZSgpID09IEpTTWFwVHlwZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIG1hcFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTg5LDExICsx
OTMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+
Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2Jq
LCBJdGVyYXRlS2V5KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0
ZUZ1bmNJc01hcChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc0Jvb2xlYW4oanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKSkpOwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFw
SXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpT
TWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKQEAgLTIwNiwxMyArMjA1LDEyIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBBU1NFUlQoanNE
eW5hbWljQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU01h
cEl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1Zh
bHVlKCkpOwogICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoaXRlcmF0b3ItPm5leHRL
ZXlWYWx1ZShrZXksIHZhbHVlKSkgeworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGV4
ZWMsIGtleSwgdmFsdWUpKSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0
PEpTQXJyYXkqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJlc3VsdEFy
cmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCBrZXkpOwogICAgICAgICByZXN1bHRBcnJheS0+
cHV0RGlyZWN0SW5kZXgoZXhlYywgMSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwyMiArMTkx
LDYgQEAgdm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAgIG1fYXR0
cmlidXRlcyAmPSB+UmVhZE9ubHk7CiB9CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQotewotICAgIGlmICgh
YS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywg
YSwgYik7Ci0gICAgaWYgKCFiLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBkb3VibGUgeCA9IGEuYXNOdW1iZXIoKTsKLSAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsK
LSAgICBib29sIHhJc05hTiA9IHN0ZDo6aXNuYW4oeCk7Ci0gICAgYm9vbCB5SXNOYU4gPSBzdGQ6
OmlzbmFuKHkpOwotICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQotICAgICAgICByZXR1cm4geElz
TmFOICYmIHlJc05hTjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBi
aXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHkpOwotfQotCiBib29sIFByb3BlcnR5RGVzY3JpcHRvcjo6
ZXF1YWxUbyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIp
IGNvbnN0CiB7CiAgICAgaWYgKG90aGVyLm1fdmFsdWUuaXNFbXB0eSgpICE9IG1fdmFsdWUuaXNF
bXB0eSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2Ny
aXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eURlc2NyaXB0b3IuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkg
KzMyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdldHRlclNldHRlcjsKIAotLy8gU2Vl
IEVTNS4xIDkuMTIKLWJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUp
OwotCiBjbGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgewogcHVibGljOgogICAgIFByb3BlcnR5RGVz
Y3JpcHRvcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYz
LDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2Fs
bGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1Rh
cmdldCgpLCBnbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEpTU2V0KiBzZXQgPSBK
U1NldDo6Y3JlYXRlKGV4ZWMsIHZtLCBzZXRTdHJ1Y3R1cmUpOworICAgIGlmIChVTkxJS0VMWShz
Y29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1
ZSgpKTsKLSAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCBzZXRTdHJ1Y3R1cmUp
OwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRl
cmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQ
cm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MCw3ICs2MCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRl
cmF0b3IKIAogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2Fs
bEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1l
LCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0m
IHZtCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+YWRkLCBzZXRQcm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwg
c2V0UHJvdG9GdW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQ
cm90b0Z1bmNEZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywg
RG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVu
dW0sIDEsIEpTU2V0SGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVi
bGljTmFtZSgpLCBzZXRQcm90b0Z1bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1
bmN0aW9uKiB2YWx1ZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwg
dm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmlu
ZygpLCBzZXRQcm90b0Z1bmNWYWx1ZXMpOwpAQCAtMTg2LDcgKzE4Niw2IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERp
cmVjdEluZGV4KGV4ZWMsIDAsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgfQotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiAr
NjUsNyBAQAogI2luY2x1ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRl
ICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUg
IkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1By
b3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXku
aCIKQEAgLTI0OSw2ICsyNTAsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhl
YXBUeXBlKQogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUNvZGVCbG9j
a1N0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjZW5kaWYKKyAgICBoYXNoTWFwQnVja2V0U2V0U3Ry
dWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwQnVja2V0TWFw
U3RydWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZh
bHVlPjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGhhc2hNYXBJ
bXBsU2V0U3RydWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNo
TWFwQnVja2V0RGF0YUtleT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CisgICAgaGFzaE1hcEltcGxNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogCiAgICAgaXRlcmF0aW9uVGVybWluYXRvci5zZXQoKnRoaXMs
IEpTRmluYWxPYmplY3Q6OmNyZWF0ZSgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSwgMSkpKTsKICAgICBuYXRpdmVTdGRGdW5jdGlvbkNlbGxT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBOYXRpdmVTdGRGdW5jdGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
aAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDYgKzMzMSwxMCBAQCBwdWJsaWM6CiAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gZXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJl
PiBmdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJB
c3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFw
QnVja2V0U2V0U3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRN
YXBTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEltcGxTZXRTdHJ1Y3R1
cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEltcGxNYXBTdHJ1Y3R1cmU7CiAKICAg
ICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+
IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9NYXBCYXNlX2gK
KyNkZWZpbmUgV2ViQ29yZV9GV0RfTWFwQmFzZV9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
TWFwQmFzZS5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNjgsNyArMTM2OCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENs
b25lU2VyaWFsaXplcjoKICAgICAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTog
ewogICAgICAgICAgICAgICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0gbWFwSXRlcmF0b3JT
dGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAgICAg
ICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShrZXksIHZhbHVlKSkgeworICAg
ICAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShtX2V4ZWMsIGtleSwgdmFs
dWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgp
OwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFj
ay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFw
Kj4ob2JqZWN0KSk7CkBAIC0yNTQ1LDcgKzI1NDUsOSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQg
Q2xvbmVEZXNlcmlhbGl6ZXI6CiAgICAgICAgIG1hcE9iamVjdFN0YXJ0U3RhdGU6IHsKICAgICAg
ICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJz
aW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFN0
YWNrT3ZlcmZsb3dFcnJvcik7Ci0gICAgICAgICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0
ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+dm0oKSwgbV9n
bG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWSht
X2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAg
ICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwKTsKICAgICAgICAgICAgIG91dHB1dE9iamVj
dFN0YWNrLmFwcGVuZChtYXApOwogICAgICAgICAgICAgbWFwU3RhY2suYXBwZW5kKG1hcCk7CkBA
IC0yNTc0LDcgKzI1NzYsOSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6
ZXI6CiAgICAgICAgIHNldE9iamVjdFN0YXJ0U3RhdGU6IHsKICAgICAgICAgICAgIGlmIChvdXRw
dXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQogICAgICAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFN0YWNrT3ZlcmZsb3dFcnJv
cik7Ci0gICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShtX2V4ZWMtPnZtKCks
IG1fZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBKU1NldCogc2V0
ID0gSlNTZXQ6OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNl
dFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2Vw
dGlvbigpKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1
ZmZlci5hcHBlbmQoc2V0KTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChz
ZXQpOwogICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKHNldCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287714</attachid>
            <date>2016-09-01 19:23:32 -0700</date>
            <delta_ts>2016-09-02 11:08:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>161428</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMzEpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTAxICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5k
IEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBFUzZTYW1wbGVCZW5jaC9jbGkuanM6CisKIDIwMTYtMDgtMjMgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcnVu
IEVTNlNhbXBsZUJlbmNoIGZyb20gdGhlIGpzYyBzaGVsbApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9FUzZTYW1wbGVCZW5jaC9jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9F
UzZTYW1wbGVCZW5jaC9jbGkuanMJKHJldmlzaW9uIDIwNTMwNSkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0ICszMCw0IEBA
IGxvYWQoImFpcl9iZW5jaG1hcmsuanMiKTsKIGxvYWQoImJhc2ljX2JlbmNobWFyay5qcyIpOwog
bG9hZCgiZ2x1ZS5qcyIpOwogCi1kcml2ZXIuc3RhcnQoMTApOworZHJpdmVyLnN0YXJ0KDQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAwIEBA
CisyMDE2LTA5LTAxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZhbXBzIGhvdyB3ZSBpbXBsZW1lbnQg
TWFwIGFuZCBTZXQuIEl0IHVzZXMKKyAgICAgICAgYSBuZXcgaGFzaCBtYXAgaW1wbGVtZW50YXRp
b24uIFRoZSBoYXNoIG1hcCB1c2VzIGxpbmVhcgorICAgICAgICBwcm9iaW5nIGFuZCBpdCB1c2Vz
IFdhbmcncyA2NCBiaXQgaGFzaCBmdW5jdGlvbiBmb3IgSlNWYWx1ZXMKKyAgICAgICAgdGhhdCBh
cmVuJ3Qgc3RyaW5ncy4gU3RyaW5ncyB1c2UgU3RyaW5nSW1wbCdzIGhhc2ggZnVuY3Rpb24uCisg
ICAgICAgIFRoZSByZWFzb24gSSB3YW50ZWQgdG8gcm9sbCBvdXIgb3duIEhhc2hUYWJsZSBpcyB0
d29mb2xkOgorICAgICAgICBJIGRpZG4ndCB3YW50IHRvIGlubGluZSBXVEY6Okhhc2hNYXAncyBp
bXBsZW1lbnRhdGlvbiBpbnRvIG91cgorICAgICAgICBKSVQsIHNpbmNlIHRoYXQgc2VlbXMgZXJy
b3IgcHJvbmUgYW5kIHVubWFpbnRhaW5hYmxlLiBBbHNvLCBJIHdhbnRlZAorICAgICAgICBhIGRp
ZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIGhhc2ggbWFwIGJ1Y2tldHMgd2hlcmUgYnVja2V0cyBhbHNv
IGV4aXN0IGluCisgICAgICAgIGEgbGlua2VkIGxpc3QuCisKKyAgICAgICAgVGhlIHJlYXNvbiBm
b3IgbWFraW5nIGJ1Y2tldHMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IGlzIHRoYXQgaXRlcmF0aW9u
CisgICAgICAgIGlzIG5vdyBzaW1wbGUuIEl0ZXJhdGlvbiB3b3JrcyBieSBqdXN0IHRyYXZlcnNp
bmcgYSBsaW5rZWQgbGlzdC4KKyAgICAgICAgVGhpcyBkZXNpZ24gYWxzbyBhbGxvd3MgZm9yIGEg
c2ltcGxlIGltcGxlbWVudGF0aW9uIHdoZW4gZG9pbmcgaXRlcmF0aW9uCisgICAgICAgIHdoaWxl
IHRoZSBoYXNoIHRhYmxlIGlzIG11dGF0aW5nLiBXaGVuZXZlciB3ZSByZW1vdmUgYSBidWNrZXQg
ZnJvbQorICAgICAgICB0aGUgaGFzaCB0YWJsZSwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0
LCBtZWFuaW5nIGl0ZW1zIGluIHRoZQorICAgICAgICBsaXN0IGRvbid0IHBvaW50IHRvIGl0LiBI
b3dldmVyLCB0aGUgcmVtb3ZlZCBidWNrZXQgd2lsbCBzdGlsbCBwb2ludAorICAgICAgICB0byB0
aGluZ3MgdGhhdCBhcmUgZWl0aGVyIGluIHRoZSBsaXN0LCBvciBoYXZlIGFsc28gYmVlbiByZW1v
dmVkLgorICAgICAgICBlLmcsIGZyb20gYSByZW1vdmVkIGJ1Y2tldCwgeW91IGNhbiBhbHdheXMg
Zm9sbG93IHBvaW50ZXJzIHVudGlsIHlvdQorICAgICAgICBlaXRoZXIgZmluZCBhbiBpdGVtIGlu
IHRoZSBsaXN0LCBvciB5b3UgZmluZCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgICAgVGhp
cyBpcyBhIHJlYWxseSBuaWNlIHByb3BlcnR5IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBhIE1hcCBv
ciBTZXQKKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byByZWFzb24gYWJvdXQgdGhlIGFsbCB0aGUg
aXRlcmF0b3JzIHRoYXQgcG9pbnQKKyAgICAgICAgaW50byBpdHMgbGlzdC4gQWxzbywgd2hlbmV2
ZXIgd2UgYWRkIGl0ZW1zIHRvIHRoZSBNYXAgb3IgU2V0LCB3ZQorICAgICAgICBoaWphY2sgdGhl
IHRhaWwgYXMgdGhlIG5ldyBpdGVtLCBhbmQgbWFrZSB0aGUgbmV3IGl0ZW0gcG9pbnQgdG8gYSBu
ZXdseQorICAgICAgICBjcmVhdGVkIHRhaWwuIFRoaXMgbWVhbnMgdGhhdCBhbnkgaXRlcmF0b3Ig
dGhhdCBwb2ludGVkIHRvIHRoZSAidGFpbCIgbm93CisgICAgICAgIHBvaW50cyB0byBub24tdGFp
bCBpdGVtcy4gVGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYWRkaW5nIHRoaW5ncwor
ICAgICAgICB0byB0aGUgTWFwL1NldCB3aGlsZSBpdGVyYXRpbmcgZWFzeS4KKworICAgICAgICBJ
IGFsc28gbWFkZSBNYXAucHJvdG90eXBlLmdldCwgTWFwLnByb3RvdHlwZS5oYXMsIGFuZCBTZXQu
cHJvdG90eXBlLmhhcworICAgICAgICBpbnRvIGludHJpbnNpY3MgaW4gdGhlIERGRy4gVGhlIElS
IGNhbiBub3cgcmVhc29uIGFib3V0IGhhc2ggbWFwCisgICAgICAgIG9wZXJhdGlvbnMgYW5kIGNh
biBldmVuIGRvIENTRSBvdmVyIFdhbmcncyBoYXNoIGZ1bmN0aW9uLCBoYXNoIG1hcAorICAgICAg
ICBidWNrZXQgbG9va3VwcywgaGFzaCBtYXAgYnVja2V0IGxvYWRzLCBhbmQgdGVzdGluZyBpZiBh
IGtleSBpcyBpbgorICAgICAgICB0aGUgaGFzaCB0YWJsZS4gVGhpcyBtYWtlcyBjb2RlIHBhdHRl
cm5zIGZvciBNYXAgbGlrZSBzbywgc3VwZXIgZmFzdAorICAgICAgICBpbiB0aGUgRlRMLCBzaW5j
ZSB3ZSB3aWxsIG9ubHkgYmUgZG9pbmcgYSBzaW5nbGUgaGFzaCBhbmQgaGFzaCBidWNrZXQgbG9v
a3VwOgorCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBnZXRLZXlJZlByZXNlbnQobWFw
LCBrZXkpIHsKKyAgICAgICAgCWlmIChtYXAuaGFzKGtleSkpCisgICAgICAgIAkJcmV0dXJuIG1h
cC5nZXQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKworICAgICAgICBUaGlzIHBhdGNo
IGlzIHJvdWdobHkgYW4gOCUgc3BlZWR1cCBvbiBFUzZTYW1wbGVCZW5jaC4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljQ2FsbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dD
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdFZGdl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpERkc6
OkVkZ2U6Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9E
RkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5k
LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Vz
ZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjppc0NlbGwpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hcEhhc2gpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TWFwQnVja2V0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUxvYWRGcm9tSlNNYXBCdWNr
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSXNOb25F
bXB0eU1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxv
d01hcE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1Nl
dE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd01hcEJ1
Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZU1hcE9iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZVNldE9i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNldE1hcEJ1Y2tl
dCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1JlZ0V4cE9iamVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1N0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpz
cGVjdWxhdGVSZWdFeHBPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpzZXRTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0
SGFzaCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBwYXJzZXIvTW9kdWxl
QW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVBbmFseXplcjo6TW9kdWxlQW5hbHl6
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6Okhhc2hNYXBC
dWNrZXQ6OnNlbGVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6Okhhc2hNYXBCdWNrZXQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwQnVja2V0OjpzZXROZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6
c2V0UHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldEtleSk6CisgICAgICAg
IChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldFZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1
Y2tldDo6a2V5KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6dmFsdWUpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVja2V0OjpuZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tl
dDo6cHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmRlbGV0ZWQpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVja2V0OjpzZXREZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEJ1Y2tldDo6b2Zmc2V0T2ZLZXkpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpvZmZz
ZXRPZlZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpidWZmZXIpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjphcmVLZXlzRXF1YWwpOgorICAg
ICAgICAoSlNDOjpub3JtYWxpemVNYXBLZXkpOgorICAgICAgICAoSlNDOjpqc01hcEhhc2gpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6c2VsZWN0U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJ
bXBsOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6SGFzaE1hcEltcGwpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmVtcHR5
VmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Okhhc2hNYXBJbXBsOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1w
bDo6aXNEZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXQpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcElt
cGw6Omhhcyk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjphZGQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnNpemUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpIYXNo
TWFwSW1wbDo6YnVmZmVyU2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6
b2Zmc2V0T2ZCdWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6b2Zmc2V0T2ZDYXBh
Y2l0eSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpoZWFkKToKKyAgICAgICAgKEpTQzo6
SGFzaE1hcEltcGw6OnRhaWwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YXBwcm94aW1h
dGVTaXplKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXRBbHJlYWR5SGFz
aGVkQW5kTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpyZWhhc2gpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6bWFrZUFuZFNldE5ld0J1ZmZlcik6CisgICAgICAg
ICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnNh
bWVWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU01hcDo6ZXN0aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjp2
aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OmNvcHlCYWNraW5n
U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6aGFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXA6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpy
ZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKEpT
Qzo6SlNNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU01hcDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6
CisgICAgICAgIChKU0M6OkpTTWFwOjpKU01hcCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRy
eTo6a2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5Ojp2YWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmNsb25lKToKKyAgICAgICAgKiBydW50aW1l
L0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6YWR2YW5jZUl0
ZXIpOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKEpTQzo6
SlNNYXBJdGVyYXRvcjo6bmV4dEtleVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRv
cjo6SlNNYXBJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OnNldEl0ZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6aXRlcmF0b3JEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVM
b2FkZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVy
Lmg6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9K
U1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OmVzdGltYXRlZFNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1NldDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0Ojpjb3B5
QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6Omhhcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZXQ6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpjbGVhcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNTZXQuaDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTU2V0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1NldDo6YWRkKToK
KyAgICAgICAgKEpTQzo6SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5
OjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6Y2xvbmUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjphZHZhbmNlSXRl
cik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoSlNDOjpK
U1NldEl0ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRv
cjo6c2V0SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpmaW5pc2gpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjppdGVyYXRvckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9NYXBC
YXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTxIYXNoTWFwQnVja2V0VHlw
ZT46OmVzdGltYXRlZFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQmFzZS5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6TWFwQmFzZTo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6Omhh
cyk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6TWFwQmFz
ZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluZEJ1Y2tldCk6CisgICAgICAg
IChKU0M6Ok1hcEJhc2U6Om9mZnNldE9mSGFzaE1hcEltcGwpOgorICAgICAgICAoSlNDOjpNYXBC
YXNlOjppbXBsKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpNYXBCYXNlOjpNYXBCYXNlKToKKyAgICAgICAgKiBydW50aW1lL01hcENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAgICAgICAgKiBydW50
aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQ
cm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6Z2V0TWFwKToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJc01hcCk6CisgICAgICAgIChK
U0M6OnByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OnNhbWVWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L1NldENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U2V0
SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6Z2V0U2V0KToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNTZXRJdGVyYXRv
ck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0p
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNi0wOS0wMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6
Omluc2VydE9TUkhpbnRzRm9yVXBkYXRlKCkgZmFpbHMgdG8gZW1pdCB1cGRhdGVkIGhpbnRzIGlu
IHNvbWUgY2FzZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50aW1l
L0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKKyAg
ICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKICAg
ICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVkVHlwZS5jcHAK
QEAgLTc1Miw2ICs3NTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRp
bWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAK
ICAgICBydW50aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJhc2UuY3BwCiAgICAgcnVu
dGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBl
LmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAwLDEwICsxMzAwLDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRN
YXRoSUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMg
LyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2lu
TWFwLmNwcCAqLzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3Jp
Z2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVCMTk5NzFENzhCRTM1
MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi87
IH07CisJCTc5NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhCRTM1MDAyNjJG
QTAgLyogTWFwQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYw
MDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVE
OTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLzsgfTsKKwkJ
NzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIg
LyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODMzMUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEyMjgzNjFEMzVE
NzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxp
bmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUzMywxMCAr
MzUzNywxNCBAQAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVP
cmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0ODFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyog
SGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFz
aE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RTFENzY4
NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBMjI4
MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElD
Rm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9y
d2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NzQsNiArNTc4Miw4IEBA
CiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLywKIAkJCQlC
QzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMz
N0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJNzlBMDkwN0Qx
RDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJCQk3OUEwOTA3RTFENzY4
NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4
NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNF
IC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRl
bnRpZmllcklubGluZXMuaCAqLywKQEAgLTU5ODIsNiArNTk5Miw4IEBACiAJCQkJQTdFMkVBNjkw
RkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJCQlGNjkyQTg2ODAyNTU1
OTdEMDFGRjYwRjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1OTdEMDFGRjYw
RjcgLyogTG9va3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJh
c2UuY3BwICovLAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8s
CiAJCQkJQTcwMDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCAqLywK
IAkJCQlBNzAwODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCAqLywKIAkJ
CQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLApAQCAtNzI3MSw2ICs3
MjgzLDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVT
aHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgxRDc4QkUzNTAwMjYyRkEw
IC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3MUI4NEZCNEEwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQjExNEJD
RjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMy
OUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAg
LTc0MzcsNiArNzQ1MCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0Zs
dXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBC
QkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5QTA5MDgwMUQ3
Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUND
ODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzEsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVG
OTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2
NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBB
MUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZBQTAwQ0Y2NTY0
IC8qIEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNC
Njg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIwMSw2
ICs5MjE2LDcgQEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJGRjJCMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
QzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUg
IlNwZWN1bGF0ZWRUeXBlLmgiCiAKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNp
bmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IlN0cmluZ09iamVjdC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtMzQ2LDYgKzM0
OCwxMiBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBp
ZiAoY2xhc3NJbmZvID09IFJlZ0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3Bl
Y1JlZ0V4cE9iamVjdDsKKworICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAg
ICAgICAgcmV0dXJuIFNwZWNNYXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0
OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChj
bGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1
cm4gU3BlY0Z1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0
MSArMzksNDMgQEAgY2xhc3MgU3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0
ZWRUeXBlOwogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAg
ICAgPSAwOyAvLyBXZSBkb24ndCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
QXJyYXkgICAgICAgICAgICAgID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJh
eS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0g
MXUgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIEludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUg
PDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJj
bGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAg
ICAgPSAxdSA8PCA2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2Yg
aXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xh
bXBlZEFycmF5ICA9IDF1IDw8IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBVaW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAx
dSA8PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3Qg
ICAgICAgID0gMXVsbCA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxs
IDw8IDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bmN0aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgSlNGdW5jdGlvbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50
OEFycmF5ICAgICAgICAgID0gMXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFy
cmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjSW50MTZBcnJheSAgICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gSW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0ludDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nl
cy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0g
MXVsbCA8PCA3OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25l
IG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50
MTZBcnJheSAgICAgICAgPSAxdWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIFVpbnQzMkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8
PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3Vi
Y2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcg
ICAgID0gU3BlY0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBT
cGVjVWludDhBcnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8
IFNwZWNVaW50MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owot
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8
PCAxMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBSZWdFeHBPYmplY3QgKGFuZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8
IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwg
SlNBcnJheSwgb3IgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
T2JqZWN0ICAgICAgICAgICAgID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1
bmN0aW9uIHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNT
Y29wZWRBcmd1bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNw
ZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBv
ZiBvYmplY3QgcHJlZGljdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3Ry
aW5nSWRlbnQgICAgICAgID0gMXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5n
LCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNTdHJpbmdWYXIgICAgICAgICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNT
dHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNTY29wZWRBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNTdHJpbmdPYmplY3QgICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBTdHJpbmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9i
amVjdCAgICAgICA9IDF1bGwgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVj
dCAoYW5kIG5vdCBhbnkgc3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjTWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQn
cyBkZWZpbml0ZWx5IE1hcCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwg
PDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNs
YXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVy
ICAgICAgICA9IDF1bGwgPDwgMTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5v
dCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBT
cGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0
QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVj
UmVnRXhwT2JqZWN0IHwgU3BlY01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0
T3RoZXI7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0
IHByZWRpY3Rpb24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50
ICAgICAgICA9IDF1bGwgPDwgMTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQg
aXQncyBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdWYXIgICAgICAgICAgPSAxdWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmlu
ZywgYW5kIGl0J3Mgbm90IGFuIGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1N0cmluZyAgICAgICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdW
YXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNTeW1ib2wgICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgU3ltYm9sLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIg
ICAgICAgICAgPSAxdSA8PCAyMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3Qg
YSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBh
IFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0
ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1
bGwgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVm
aW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0
IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0NlbGwgICAgICAgICAgICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCB8IFNwZWNDZWxsT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxs
IDw8IDIzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwg
PDwgMjQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4g
MCBvciAxLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAg
ICAgPSBTcGVjQm9vbEludDMyIHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIEludDMyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAg
ICAgICAgPSAxdSA8PCAyMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRl
bmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8
PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5i
b3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNw
ZWNJbnQ1Mk9ubHk7IC8vIEl0J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50
IGFyaXRobWV0aWMgb24uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFz
RG91YmxlICAgICA9IDF1IDw8IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0
J3MgaW5zaWRlIGEgZG91YmxlLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25J
bnRBc0RvdWJsZSAgICAgPSAxdSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1
MiBidXQgaXQncyBhIHJlYWwgbnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3
OyAvLyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIg
YW5kIGl0J3MgYSBkb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJs
ZVJlYWwgICAgICAgICA9IFNwZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgTmFOIHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxs
IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUu
IHB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4g
ICAgPSAxdWxsIDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUg
dG8gdGFnIChpLmUuIGltcHVyZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Rv
dWJsZU5hTiAgICAgICAgICA9IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5h
TjsgLy8gSXQncyBkZWZpbml0ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3Bl
Y0RvdWJsZVB1cmVOYU47IC8vIEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUs
IGJ1dCBpdCdzIGRlZmluaXRlbHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bGxEb3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0Rv
dWJsZU5hTjsgLy8gSXQncyBlaXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgx
LDEyICs4MywxMiBAQCBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNB
bnlJbnQgfCBTcGVjRG91YmxlUmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3Vi
bGVSZWFsLCBvciBhIEludDUyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRl
Y29kZU51bWJlciAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJ
dCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJl
IGFuIGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1i
ZXIgICAgICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIg
YW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVy
ZSBOYU4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAg
ICA9IDF1IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQn
cyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3Ro
ZXIgICAgICAgICAgICAgID0gMXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBO
dWxsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAg
ICAgICAgICAgICAgID0gU3BlY0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVs
eSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNl
cHQgZm9yIFNwZWNJbnQ1Mk9ubHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5v
bi1PYmplY3QgSlNWYWx1ZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkg
ICAgICAgICAgICAgID0gMXUgPDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1
ZSBtYXJrZXIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAg
ICAgICA9IDF1bGwgPDwgMzI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJr
ZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9
IFNwZWNIZWFwVG9wIHwgU3BlY0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwg
ZXhjZXB0IGZvciBTcGVjSW50NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNw
b25kcyB0byB3aGF0IGNvdWxkIGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29k
ZVRvcCB8IFNwZWNGdWxsTnVtYmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29k
ZSBjb3VsZCBzZWUgcGx1cyBleG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTc3LDYgKzk3NywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwogICAgIGNhc2Ug
SXNFbXB0eToKICAgICBjYXNlIElzSlNBcnJheToKICAgICBjYXNlIElzVW5kZWZpbmVkOgpAQCAt
Mjg4Myw3ICsyODk5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVuc2ln
bmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5h
dChpbmRleEluQmxvY2spOwotICAgIAorCiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVj
dXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywg
bm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwz
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldElu
dHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAg
ICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lz
dGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9H
cmFwaChNYXBIYXNoLCBrZXkpOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdl
dE1hcEJ1Y2tldCwgRWRnZShtYXAsIE1hcE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNo
KSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tl
dCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgY2FzZSBKU1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFw
SGFzSW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGluc2VydENoZWNrcygp
OworICAgICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFz
aCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0g
aW50cmluc2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0
VXNlOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJ
bmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsK
KyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBi
dWNrZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYgKzEyNDMsMjcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9n
U2hhZG93Q2hpY2tlblRhaWw6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFk
KE1pc2NGaWVsZHMpOworICAgICAgICBFZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7Cisg
ICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBub2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihNYXBCdWNrZXRMb2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGtleUVkZ2UpLCBMYXp5
Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIGJ1
Y2tldEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01h
cEdldExvYywgTWlzY0ZpZWxkcywgYnVja2V0RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAg
IHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTWFwSGFzTG9jLCBN
aXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSwxMCBAQCBib29sIGRv
ZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAg
ICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6
CisgICAgY2FzZSBNYXBIYXNoOgorICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBJbkxvb3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vk
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBBZGphY2VuY3lMaXN0OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RhdGlj
IHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNzsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3Qgc2hpZnQoKSB7IHJldHVybiA4OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBt
YWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3Rh
dHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewpAQCAtMTk3LDggKzE5NywyMSBAQCBw
cml2YXRlOgogICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUg
Pj4gc2hpZnQoKSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBB
U1NFUlQodXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFT
U0VSVCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRl
ZFZhbHVlIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpk
b2VzS2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjpp
c1Byb3ZlZChwcm9vZlN0YXR1cykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAyKSA8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDEpIDw8IHNoaWZ0KCkpLCAiV2UgcmVseSBvbiB0aGlzIGJlaW5nIHRydWUgdG8gbm90IGNsb2Ji
ZXIgdGhlIG5vZGUgcG9pbnRlci4iKTsKKyAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHNoaWZ0
ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6
ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6
aXNQcm92ZWQocHJvb2ZTdGF0dXMpKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIHVuaW9uIFUgeworICAgICAgICAgICAgICAgIFUoKSB7IHdvcmQgPSAwOyB9
CisgICAgICAgICAgICAgICAgdWludHB0cl90IHdvcmQ7CisgICAgICAgICAgICAgICAgRWRnZSBl
ZGdlOworICAgICAgICAgICAgfSB1OworICAgICAgICAgICAgdS53b3JkID0gcmVzdWx0OworICAg
ICAgICAgICAgQVNTRVJUKHUuZWRnZS51c2VLaW5kVW5jaGVja2VkKCkgPT0gdXNlS2luZCk7Cisg
ICAgICAgICAgICBBU1NFUlQodS5lZGdlLm5vZGUoKSA9PSBub2RlKTsKKyAgICAgICAgICAgIEFT
U0VSVCh1LmVkZ2UucHJvb2ZTdGF0dXNVbmNoZWNrZWQoKSA9PSBwcm9vZlN0YXR1cyk7CisgICAg
ICAgICAgICBBU1NFUlQodS5lZGdlLmtpbGxTdGF0dXNVbmNoZWNrZWQoKSA9PSBraWxsU3RhdHVz
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICNlbHNl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDUsNiArMTU0NSwyOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8TWFwT2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2Jq
ZWN0VXNlKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8U2V0T2JqZWN0VXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0Ogor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIE1hcEhhc2g6CisgICAgICAgICAgICBmaXhFZGdlPFVu
dHlwZWRVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8g
ZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rl
cy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQzLDYgKzE0MywxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
TG9jCiAgICAgY2FzZSBSZWdFeHBPYmplY3RMYXN0SW5kZXhMb2M6CiAgICAgICAgIG91dC5wcmlu
dCgiUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1hcEJ1Y2tldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNYXBCdWNrZXRMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNN
YXBHZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwSGFzTG9jOgorICAgICAg
ICBvdXQucHJpbnQoIk1hcEhhc0xvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAg
ICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2MsCi0gICAgU3RhY2tQYXls
b2FkTG9jCisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAgIE1hcEJ1Y2tldExvYywKKyAgICBKU01h
cEdldExvYywKKyAgICBNYXBIYXNMb2MKIH07CiAKIGNsYXNzIEhlYXBMb2NhdGlvbiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MTks
NiArMTQxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgICAg
ICBjYXNlIFN0cmluZ1JlcGxhY2VSZWdFeHA6CiAgICAgICAgIGNhc2UgVG9OdW1iZXI6CisgICAg
ICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODgsNyArMzg4LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oVG9JbmRleFN0
cmluZywgTm9kZVJlc3VsdEpTKQorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRK
UykgXAorICAgIC8qIEhhc2hpbmcgbm9kZXMgZm9yIEpTTWFwIGFuZCBKU1NldCAqLyBcCisgICAg
bWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oR2V0TWFwQnVja2V0
LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhJc05vbkVtcHR5TWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVh
bikgXAogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5n
IGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50
IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2sp
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01h
cC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0x
ODAzLDYgKzE4MDUsMzQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNW
YQogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpLCBzbG90KTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKworICAgIHJldHVybiBqc01hcEhhc2goZXhlYywgdm0sIG5vcm1hbGl6
ZU1hcEtleShKU1ZhbHVlOjpkZWNvZGUoaW5wdXQpKSk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1h
cCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5k
QnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1Y2tl
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNT
ZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsK
KyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpi
dWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGlt
aXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpCiB7CiAg
ICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBo
ZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiAr
MTQyLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmlu
Z0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3Rl
clN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90KTsKKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09i
amVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzExLDYgKzcxMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBMb2FkRnJv
bUpTTWFwQnVja2V0OgogICAgICAgICBjYXNlIFRvTnVtYmVyOiB7CiAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC03NDEsNiArNzQyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJl
YWs7CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA1MzA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEZ1bmN0aW9u
VXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFJlZ0V4cE9i
amVjdFVzZToKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU2V0T2Jq
ZWN0VXNlOgogICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgU3Ry
aW5nSWRlbnRVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMzU1LDYgKzM1NywxMCBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRE
eW5hbWljVmFyOgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAgICBjYXNlIFJlc29sdmVTY29w
ZToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBM
b2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIK
ICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgogI2lu
Y2x1ZGUgIkpTRW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgpAQCAtNDcyMCw2
ICs0NzIxLDgyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBNYXBIYXNoOiB7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBKU1ZhbHVl
UmVncyBpbnB1dFJlZ3MgPSBpbnB1dC5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgaW5wdXRSZWdzKTsKKyAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6IHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVn
IG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mga2V5UmVncyA9IGtleS5q
c1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxh
dGVNYXBPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVj
dWxhdGVTZXRPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBP
YmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1
Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCwgcmVz
dWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisK
KyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworCisg
ICAgICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJ
c05vbkVtcHR5TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tl
dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJl
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCks
IHJlc3VsdEdQUik7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgi
CiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJh
bWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKQEAgLTQ2MTUsNiArNDYxNywx
NjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKKyAgICBjYXNlIE1hcEhhc2g6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFu
Y2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5n
VHlwZSkpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhp
bnB1dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByZXN1bHRHUFIpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIG1faml0LnVyc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDYpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9q
aXQuanVtcCgpKTsKKworICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICBz
dHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSk7Cisg
ICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVn
cyhpbnB1dEdQUikpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisK
KyAgICAgICAgc3RyYWlnaHRIYXNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuV2FuZ3NJbnQ2NEhhc2gocmVzdWx0
R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAg
ICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwg
cmVzdWx0R1BSLCBpbnB1dEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IG1hc2sodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IGJ1ZmZlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1
Y2tldCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAg
ICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBt
YXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXNrR1BSID0gbWFzay5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWZmZXJHUFIg
PSBidWZmZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBrZXlHUFIgPSBrZXkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9k
ZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qo
bm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtYXBHUFIsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBP
YmplY3RVc2UgPyBKU01hcDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpIDogSlNTZXQ6Om9mZnNldE9m
SGFzaE1hcEltcGwoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZDYXBhY2l0eSgpKSwgbWFza0dQUik7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVm
ZmVyKCkpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IG1hc2tHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGhhc2hHUFIsIGluZGV4R1BSKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGxvb3BBcm91bmQ7CisKKyAgICAgICAgbV9qaXQuYW5kMzIobWFza0dQUiwgaW5kZXhHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyR1BS
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBidWNrZXRHUFIpOworICAg
ICAgICBtX2ppdC5tb3ZlKGJ1Y2tldEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBub3RQ
cmVzZW50SW5UYWJsZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSk7CisgICAgICAgIGxv
b3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkpLCBidWNrZXRHUFIp
OworCisgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRHUFIsIGtleUdQUikp
OyAvLyBUaGV5J3JlIGRlZmluaXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdlIGZvdW5kIHRoZSBidWNr
ZXQgd2Ugd2VyZSBsb29raW5nIGZvciEKKyAgICAgICAgYXV0byBvbmVJc250Q2VsbCA9IG1faml0
LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKTsKKyAgICAgICAgLy8gZmly
c3QgaXMgYSBjZWxsIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5j
aElmTm90Q2VsbChKU1ZhbHVlUmVncyhrZXlHUFIpKSk7CisgICAgICAgIC8vIEJvdGggYXJlIGNl
bGxzIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYnVja2V0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5
cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZyBoZXJlLgorICAgICAgICBz
bG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGtleUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAvLyBUaGUg
Zmlyc3QgaXMgYSBzdHJpbmcsIGJ1dCB0aGUgc2Vjb25kIGlzIG5vdCwgd2UgY29udGludWUgdG8g
bG9vcCBhcm91bmQuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisK
KyAgICAgICAgb25lSXNudENlbGwubGluaygmbV9qaXQpOworICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IGRvbmUgYSA2NC1iaXQgY29tcGFyZSBhdCB0aGlzIHBvaW50LCBzbyBpZiBvbmUgaXMgbm90
IGEgbnVtYmVyLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVxdWFsLgorICAgICAgICBsb29wQXJv
dW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihidWNrZXRHUFIpKTsKKyAgICAgICAg
bG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoa2V5R1BSKSk7CisgICAg
ICAgIC8vIEJvdGggYXJlIGRlZmluaXRlbHkgbnVtYmVycy4gSWYgd2Ugc2VlIGEgZG91YmxlLCB3
ZSBnbyB0byB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdEludDMyKGJ1Y2tldEdQUikpOworICAgICAgICBzbG93UGF0aENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGtleUdQUikpOworICAgICAgICAKKyAgICAgICAg
bG9vcEFyb3VuZC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNT
ZXRGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAg
ICAgbm90UHJlc2VudEluVGFibGUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBi
dWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBi
dWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1Y2tl
dEdQUiwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzgxLDYgKzczODEsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlUmVnRXhwT2Jq
ZQogICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKIH0KIAor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSwgR1BSUmVn
IGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3BlY01hcE9iamVj
dCwgSlNNYXBUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2Jq
ZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNYXBP
YmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVy
YW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBvcGVyYW5kLmdw
cigpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2Ug
ZWRnZSwgR1BSUmVnIGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwg
U3BlY1NldE9iamVjdCwgSlNTZXRUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVk
Z2UsIFNwZWNTZXRPYmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdl
LCBvcGVyYW5kLmdwcigpKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcihFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBT
cGVjT2JqZWN0IHwgU3BlY090aGVyKSkKQEAgLTc2NjgsNiArNzY5NiwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6
CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0
ZVNldE9iamVjdChlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RPck90aGVy
VXNlOgogICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOwogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5MSw2ICsxMjkxLDEyIEBAIHB1Ymxp
YzoKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKENfSklUT3BlcmF0aW9uX0VDSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMg
b3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVS
ZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIuZ3ByKCksIG1hdGhJQyk7
CkBAIC0xNjcxLDYgKzE2NzcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVy
YXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25l
ZCBhcmcyLCB1bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFy
ZzMpKTsKQEAgLTE3MTksNiArMTczMSwxOCBAQCBwdWJsaWM6CiAgICAgfQogI2Vsc2UgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19K
SVRPcGVyYXRpb25fRUNKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBK
U1ZhbHVlUmVncyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdH
UFIoKSwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3Mg
YXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwg
SlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJn
MS5wYXlsb2FkR1BSKCksIGFyZzEudGFnR1BSKCksIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRh
Z0dQUigpLCBtYXRoSUMpOwpAQCAtMjY1Niw2ICsyNjgwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2Jq
ZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChF
ZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNwZWN1
bGF0ZU1hcE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRP
YmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSwgR1BSUmVnIGNl
bGwpOwogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNw
ZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2UoRWRnZSBlZGdlLCBHUFJSZWcgc3RyaW5nLCBHUFJS
ZWcgc3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNl
S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDEyIEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAg
ICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk1hcE9iamVjdFVzZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIG91dC5wcmludCgi
U2V0T2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJV
c2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDggQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93blN0cmluZ1Vz
ZSwKICAgICBLbm93blByaW1pdGl2ZVVzZSwgLy8gVGhpcyBiaXphcnJlIHR5cGUgYXJpc2VzIGZv
ciBvcF9zdHJjYXQsIHdoaWNoIGhhcyBhIGJ5dGVjb2RlIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwg
b25seSBzZWUgcHJpbWl0aXZlcyAoaS5lLiBub3Qgb2JqZWN0cykuCiAgICAgU3ltYm9sVXNlLAor
ICAgIE1hcE9iamVjdFVzZSwKKyAgICBTZXRPYmplY3RVc2UsCiAgICAgU3RyaW5nT2JqZWN0VXNl
LAogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5vdFN0cmluZ1ZhclVzZSwKQEAg
LTEzNCw2ICsxMzYsMTAgQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNl
SwogICAgICAgICByZXR1cm4gU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdDsKICAgICBjYXNlIFN5
bWJvbFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNTeW1ib2w7CisgICAgY2FzZSBNYXBPYmplY3RV
c2U6CisgICAgICAgIHJldHVybiBTcGVjTWFwT2JqZWN0OworICAgIGNhc2UgU2V0T2JqZWN0VXNl
OgorICAgICAgICByZXR1cm4gU3BlY1NldE9iamVjdDsKICAgICBjYXNlIFN0cmluZ09iamVjdFVz
ZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZToKQEAgLTIyMSw2ICsyMjcsOCBAQCBpbmxpbmUgYm9vbCBpc0NlbGwoVXNl
S2luZCBraW5kKQogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNl
OgogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgY2FzZSBNYXBPYmplY3RV
c2U6CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRGR0Fy
cmF5TW9kZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkluZGV4
aW5nVHlwZS5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC0xMDIsNyArMTA0LDEzIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZv
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2ds
b2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwKLSAg
ICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZz
ZXQoKSkKKyAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTTWFwX2hhc2hNYXBJbXBsLCBKU01hcDo6b2Zm
c2V0T2ZIYXNoTWFwSW1wbCgpKSBcCisgICAgbWFjcm8oSlNTZXRfaGFzaE1hcEltcGwsIEpTU2V0
OjpvZmZzZXRPZkhhc2hNYXBJbXBsKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9jYXBhY2l0
eSwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZz
ZXRPZkNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9idWZmZXIsICBIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVmZmVy
KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpIFwKKyAgICBtYWNybyhIYXNo
TWFwQnVja2V0X2tleSwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6
b2Zmc2V0T2ZLZXkoKSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVB
UChtYWNybykgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAg
ICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIE1hcEhh
c2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0
OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAg
Y2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTQzNyw2ICs0NDEsOCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAg
ICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAg
ICAgICAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIFNldE9iamVj
dFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTm90Q2VsbFVz
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1
ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDE4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAg
IGNvbXBpbGVNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRN
YXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0TWFwQnVja2V0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAg
Y29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlSXNOb25FbXB0
eU1hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6
CiAgICAgICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NjM1MSw2ICs2MzY0LDIyOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBo
aShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZvaWQg
Y29tcGlsZU1hcEhhc2goKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRIYXNoID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm9uRW1wdHlTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsKSk7
CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxD
YXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVh
bChtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBl
KSwgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0cmFp
Z2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbm9uRW1w
dHlTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIoMCkp
LCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5U3RyaW5nQ2FzZSkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5vbkVtcHR5U3RyaW5nQ2FzZSwgbm90Q2VsbCk7CisgICAgICAg
IExWYWx1ZSBoYXNoID0gbV9vdXQubFNocihtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFw
cy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksIG1fb3V0LmNvbnN0SW50MzIoNikpOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQgPSBtX291dC5hbmNob3Io
aGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoLCBtX291dC5jb25z
dEludDMyKDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29udGlu
dWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwgaXNOdW1iZXJDYXNl
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUpLCB1
bnN1cmUoaXNOdW1iZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShzdHJhaWdodEhhc2gp
LCB1bnN1cmUoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJhaWdodEhh
c2gsIHNsb3dDYXNlKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAg
TFZhbHVlIGtleSA9IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtleTsKKyAgICAgICAg
dGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7CisgICAgICAgIHRl
bXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRl
bXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAgIHRlbXAgPSBrZXk7
CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjIpKTsK
KyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSAr
PSB+KGtleSA8PCAxMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291
dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0ZW1wID0gbV9vdXQu
Yml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAg
ICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRl
bXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOworICAgICAgICBrZXkg
PSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7
CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9v
dXQuY29uc3RJbnQzMigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOwor
ICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAg
ICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTUpKTsKKyAgICAg
ICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtl
eSA8PCAyNyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwo
dGVtcCwgbV9vdXQuY29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90
KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8g
a2V5IF49IChrZXkgPj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0g
bV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAgICAgIGtleSA9IG1f
b3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5jYXN0VG9JbnQzMihr
ZXkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
a2V5KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsKEludDMyLCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShJ
bnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3RQcmVzZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdEVtcHR5VmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3REZWxldGVkVmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGJ1Y2tldEtleU5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBib3RoQXJlQ2VsbHMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBi
dWNrZXRLZXlJc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGJ1Y2tldEtleUlzTnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgYm90aEFyZU51bWJlcnMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBidWNrZXRLZXlJc0ludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgbWFw
OworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
KQorICAgICAgICAgICAgbWFwID0gbG93TWFwT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBlbHNlIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2Up
CisgICAgICAgICAgICBtYXAgPSBsb3dTZXRPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgTFZhbHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
IExWYWx1ZSBoYXNoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgTFZh
bHVlIGhhc2hNYXBJbXBsID0gbV9vdXQubG9hZFB0cihtYXAsIG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSA/IG1faGVhcHMuSlNNYXBfaGFzaE1hcEltcGwgOiBtX2hl
YXBzLkpTU2V0X2hhc2hNYXBJbXBsKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0Lmxv
YWRQdHIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfYnVmZmVyKTsKKyAgICAgICAg
TFZhbHVlIG1hc2sgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKGhhc2hNYXBJbXBsLCBtX2hlYXBz
Lkhhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaGFzaCk7CisgICAgICAgIG1fb3V0
Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB1bm1h
c2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOworICAgICAgICBMVmFs
dWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50
NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSksCisgICAgICAg
ICAgICB1bnN1cmUobm90UHJlc2VudEluVGFibGUpLCB1bnN1cmUobm90RW1wdHlWYWx1ZSkpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5vdERlbGV0ZWRWYWx1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291dC5j
b25zdEludFB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
Pj46OmRlbGV0ZWRWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVu
c3VyZShub3REZWxldGVkVmFsdWUpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3REZWxl
dGVkVmFsdWUsIG5vdEJpdEVxdWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1Y2tldEtleSA9IG1fb3V0
LmxvYWQ2NChoYXNoTWFwQnVja2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNrZXRfa2V5KTsKKyAgICAg
ICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1
YWwoa2V5LCBidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShub3RCaXRFcXVhbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVxdWFs
LCBidWNrZXRLZXlJc0NlbGwpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtl
eSksCisgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwgdW5zdXJlKGJ1Y2tldEtl
eU5vdENlbGwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGwsIGJv
dGhBcmVDZWxscyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoa2V5KSwKKyAgICAgICAg
ICAgIHVuc3VyZShib3RoQXJlQ2VsbHMpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOworICAgICAg
ICBtX291dC5icmFuY2goaXNTdHJpbmcoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShi
dWNrZXRLZXlJc1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENlbGwpOworICAgICAgICBt
X291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
Tm90Q2VsbCwgYnVja2V0S2V5SXNOdW1iZXIpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RO
dW1iZXIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJl
KGJ1Y2tldEtleUlzTnVtYmVyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
SXNOdW1iZXIsIGJvdGhBcmVOdW1iZXJzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TnVt
YmVyKGtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShib3RoQXJl
TnVtYmVycykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVOdW1iZXJzLCBidWNr
ZXRLZXlJc0ludDMyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYnVja2V0S2V5
KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShidWNrZXRLZXlJc0ludDMy
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJbnQzMiwgbG9vcEFyb3Vu
ZCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGtleSksCisgICAgICAgICAgICB1
bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGxvb3BBcm91bmQsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaSh1bm1hc2tlZEluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291dC5p
bnQzMk9uZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE1hcE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlv
bkpTU2V0RmluZEJ1Y2tldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSwgaGFzaCkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
UHJlc2VudEluVGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
dFByZXNlbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5waGko
cG9pbnRlclR5cGUoKSwgYnVja2V0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJl
c3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygp
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQ
dHIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNr
ZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhh
c0J1Y2tldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1h
cEJ1Y2tldF92YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCgpCisgICAgewor
ICAgICAgICBMVmFsdWUgYnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0LCBtX291dC5jb25z
dEludFB0cigwKSk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKKyAgICB9CisKICAgICB2
b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwpAQCAtOTkyOCw2ICsxMDE2MywyMCBAQCBwcml2YXRlOgogICAgICAgICBzcGVj
dWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CisKKyAgICBMVmFsdWUgbG93TWFwT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVNYXBP
YmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBMVmFsdWUgbG93U2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVl
IGxvd1N0cmluZyhFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9t
YXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICB7CkBAIC0xMDA1MSw2ICsxMDMwMCwxNyBAQCBw
cml2YXRlOgogICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExWYWx1ZSBsb3dNYXBCdWNrZXQoRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fbWFwQnVja2V0
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1
ZSBzdHJpY3RJbnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpAQCAt
MTAzNTQsNiArMTA2MTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RV
c2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxh
dGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRP
YmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6CiAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjgyLDYgKzEwOTQ4LDI4
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwg
bG93Q2VsbChlZGdlKSk7CiAgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRn
ZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAg
ICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjTWFwT2JqZWN0LCBpc05vdFR5
cGUoY2VsbCwgSlNNYXBUeXBlKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmpl
Y3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIGxv
d0NlbGwoZWRnZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2Ug
ZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1NldE9iamVjdCwgaXNOb3RUeXBl
KGNlbGwsIEpTU2V0VHlwZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0
KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBl
ZGdlLCBMVmFsdWUgY2VsbCkKICAgICB7CkBAIC0xMTQ1MCw2ICsxMTczOCwxMCBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZh
bHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChO
b2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21hcEJ1Y2tldFZhbHVl
cy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9
CiAgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1f
aGlnaEJsb2NrKSk7CkBAIC0xMTQ4Myw2ICsxMTc3NSwxMCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBC
dWNrZXQoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fbm9kZSwg
dmFsdWUpOworICAgIH0KICAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCiAgICAgewog
ICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CkBAIC0xMTY2Niw2ICsxMTk2Miw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVl
VmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZh
bHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1
ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9tYXBCdWNrZXRWYWx1
ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7
CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIEIzIGZy
b20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIw
NTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1MiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0pOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1
bHQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0
OworICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7
CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2Ny
YXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+
IDIyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDIyKSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtl
eSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDEzKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAg
YWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1v
dmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAz
KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MyksIHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0g
KGtleSA+PiAxNSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxNSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAg
ICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gp
OworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7
CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigz
MSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2
NChUcnVzdGVkSW1tUHRyKG1hc2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9CisjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9u
ZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9
CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsg
fQpAQCAtMTQ4OSw2ICsxNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3Q8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1
c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJl
c3MocmVzdWx0R1BSLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsK
ICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHZvaWQgV2FuZ3NJbnQ2NEhhc2goR1BS
UmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5kaWYKICAgICAKIHByb3Rl
Y3RlZDoKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBAIHR5
cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxsKiAo
SklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0WlopKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCog
KEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAq
Q19KSVRPcGVyYXRpb25fRUNKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9u
X0QpKGRvdWJsZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRp
b25fRykoSlNHbG9iYWxPYmplY3QqKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpE
X0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBNb2R1bGVBbmFs
eXplcjo6TW9kdWxlQW5hbHl6ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBt
b2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBs
ZXhpY2FsVmFyaWFibGVzKQogICAgIDogbV92bSgmZXhlYy0+dm0oKSkKLSAgICAsIG1fbW9kdWxl
UmVjb3JkKGV4ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxl
S2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykpCisg
ICAgLCBtX21vZHVsZVJlY29yZChleGVjLT52bSgpLCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9kdWxlUmVjb3Jk
U3RydWN0dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxl
eGljYWxWYXJpYWJsZXMpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgorCisjaW5jbHVkZSAi
Q29waWVkQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ29weVZpc2l0b3JJbmxpbmVzLmgiCisj
aW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1w
bGF0ZTw+Citjb25zdCBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eT46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4pIH07CisKK3Rl
bXBsYXRlPD4KK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBD
UkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgordm9pZCBIYXNoTWFwQnVja2V0PERh
dGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7
CisgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4o
Y2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkp
OworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9wcmV2KTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEpICUg
c2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gMCwgIldlIGFzc3VtZSB0aGF0IHRoZXNl
IGFyZSBmaWxsZWQgd2l0aCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbWVtYmVycyBvbmx5LiIpOwor
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93
bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFy
cmllcjxVbmtub3duPikpOworfQorCit0ZW1wbGF0ZTw+Citjb25zdCBDbGFzc0luZm8gSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpzX2luZm8gPQorICAg
IHsgIkhhc2hNYXBJbXBsIiwgbnVsbHB0ciwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4pIH07CisKK3RlbXBsYXRl
PD4KK2NvbnN0IENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5VmFsdWU+Pjo6c19pbmZvID0KKyAgICB7ICJIYXNoTWFwSW1wbCIsIG51bGxwdHIs
IDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleVZhbHVlPj4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVj
a2V0Pgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEhhc2hNYXBJbXBsKiB0aGlz
T2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVD
VF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9oZWFkKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90YWlsKTsKKworICAg
IHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiwg
dGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCksIHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVz
KCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3ZvaWQgSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5
VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEJhc2U6OmNvcHlCYWNr
aW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworCisgICAgSGFzaE1hcEltcGwqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKKyAgICBpZiAodG9rZW4gPT0gTWFw
QmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhpc09i
amVjdC0+bV9idWZmZXIuZ2V0KCkpKSB7CisgICAgICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBvbGRC
dWZmZXIgPSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKTsKKyAgICAgICAgc2l6ZV90IGJ1ZmZl
clNpemVJbkJ5dGVzID0gdGhpc09iamVjdC0+YnVmZmVyU2l6ZUluQnl0ZXMoKTsKKyAgICAgICAg
SGFzaE1hcEJ1ZmZlclR5cGUqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWZmZXJU
eXBlKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGJ1ZmZlclNpemVJbkJ5dGVzKSk7CisgICAg
ICAgIG1lbWNweShuZXdCdWZmZXIsIG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAg
ICAgICB0aGlzT2JqZWN0LT5tX2J1ZmZlci5zZXRXaXRob3V0QmFycmllcihuZXdCdWZmZXIpOwor
ICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkQnVmZmVyLCBidWZmZXJTaXplSW5CeXRlcyk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJK
U09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEhhc2hNYXBCdWNrZXREYXRh
S2V5IHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworfTsKKworc3RydWN0IEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWUgeworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBrZXk7Cisg
ICAgV3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1l
IERhdGE+CitjbGFzcyBIYXNoTWFwQnVja2V0IDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBz
dGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNr
ZXREYXRhS2V5Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYg
dm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5n
ZXQoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3Rh
dGljIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShW
TSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVy
ZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXQqIGNyZWF0ZShWTSYg
dm0pCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxIYXNoTWFwQnVja2V0Pih2bS5oZWFwKSkgSGFzaE1hcEJ1Y2tldCh2bSwg
c2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGJ1Y2tldC0+ZmluaXNoQ3JlYXRpb24odm0p
OworICAgICAgICBBU1NFUlQoIWJ1Y2tldC0+bmV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFidWNr
ZXQtPnByZXYoKSk7CisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorCisgICAgREVDTEFS
RV9FWFBPUlRfSU5GTzsKKworICAgIEhhc2hNYXBCdWNrZXQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeyB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0TmV4dChWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkK
KyAgICB7CisgICAgICAgIG1fbmV4dC5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CisgICAgfQorICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRQcmV2KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0
KQorICAgIHsKKyAgICAgICAgbV9wcmV2LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0S2V5KFZNJiB2bSwgSlNWYWx1ZSBrZXkpCisgICAg
eworICAgICAgICBtX2RhdGEua2V5LnNldCh2bSwgdGhpcywga2V5KTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBz
dGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46
OnZhbHVlPjo6dHlwZSBzZXRWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAg
ICAgICBtX2RhdGEudmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleT46OnZhbHVlPjo6
dHlwZSBzZXRWYWx1ZShWTSYsIEpTVmFsdWUpIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5rZXkuZ2V0KCk7IH0KKworICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFs
dWUsIEpTVmFsdWU+Ojp0eXBlIHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2RhdGEudmFsdWUuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVj
a2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgQUxXQVlTX0lO
TElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVs
ZXRlZDsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZWxldGVkKGJvb2wgZGVsZXRlZCkg
eyBtX2RlbGV0ZWQgPSBkZWxldGVkOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9m
S2V5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tl
dCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBrZXkpOworICAgIH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZSwg
cHRyZGlmZl90Pjo6dHlwZSBvZmZzZXRPZlZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihE
YXRhLCB2YWx1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERhdGEgbV9kYXRhOworICAgIFdy
aXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX25leHQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hN
YXBCdWNrZXQ+IG1fcHJldjsKKyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07Cit9OworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBCdWZmZXIgeworcHVi
bGljOgorICAgIEhhc2hNYXBCdWZmZXIoKSA9IGRlbGV0ZTsKKworICAgIHN0YXRpYyBzaXplX3Qg
YWxsb2NhdGlvblNpemUodWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4g
Y2FwYWNpdHkgKiBzaXplb2YoQnVja2V0VHlwZSopOworICAgIH0KKworICAgIEFMV0FZU19JTkxJ
TkUgQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEJ1Y2tldFR5cGUqKj4odGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hN
YXBCdWZmZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
dWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9U
SFJPV19TQ09QRSh2bSk7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBC
dWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAgICAgdm9pZCogZGF0YSA9IG51
bGxwdHI7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIodm0uaGVhcCk7CisgICAgICAg
IGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIGFsbG9jYXRpb25TaXplLCAm
ZGF0YSkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hN
YXBCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWZmZXIqPihkYXRhKTsKKyAg
ICAgICAgbWVtc2V0KGJ1ZmZlciwgLTEsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgcmV0dXJu
IGJ1ZmZlcjsKKyAgICB9CisKK307CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgYXJlS2V5
c0VxdWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgLy8g
V2Ugd2FudCArMCBhbmQgLTAgdG8gYmUgY29tcGFyZWQgdG8gdHJ1ZSBoZXJlLiBzYW1lVmFsdWUo
KSBpdHNlbGYgZG9lc24ndAorICAgIC8vIGd1YXJhbnRlZSB0aGF0LCBob3dldmVyLCB3ZSBub3Jt
YWxpemUgYWxsIGtleXMgYmVmb3JlIGNvbXBhcmluZyBhbmQgc3RvcmluZworICAgIC8vIHRoZW0g
aW4gdGhlIG1hcC4gVGhlIG5vcm1hbGl6YXRpb24gd2lsbCBjb252ZXJ0IC0wLjAgYW5kIDAuMCB0
byB0aGUgaW50ZWdlcgorICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciAwLgorICAgIHJldHVybiBz
YW1lVmFsdWUoZXhlYywgYSwgYik7Cit9CisKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBub3JtYWxp
emVNYXBLZXkoSlNWYWx1ZSBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNOdW1iZXIoKSkKKyAgICAg
ICAgcmV0dXJuIGtleTsKKworICAgIGlmIChrZXkuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4g
a2V5OworCisgICAgZG91YmxlIGQgPSBrZXkuYXNEb3VibGUoKTsKKyAgICBpZiAoc3RkOjppc25h
bihkKSkKKyAgICAgICAgcmV0dXJuIGtleTsKKworICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50
PihkKTsKKyAgICBpZiAoaSA9PSBkKSB7CisgICAgICAgIC8vIFdoZW4gYSBrZXkgaXMgLTAsIHdl
IGNvbnZlcnQgaXQgdG8gcG9zaXRpdmUgemVyby4KKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyB0
aGUgZG91YmxlIHJlcHJlc2VudGF0aW9uIGZvciBhbiBpbnRlZ2VyLCB3ZSBjb252ZXJ0IGl0IHRv
IGFuIGludGVnZXIuCisgICAgICAgIHJldHVybiBqc051bWJlcihpKTsKKyAgICB9CisgICAgLy8g
VGhpcyBtZWFucyBrZXkgaXMgZGVmaW5pdGVseSBub3QgbmVnYXRpdmUgemVybywgYW5kIGl0J3Mg
ZGVmaW5pdGVseSBub3QgYSBkb3VibGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4gCisg
ICAgcmV0dXJuIGtleTsKK30KKworQUxXQVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShub3JtYWxpemVNYXBLZXkodmFsdWUpID09IHZhbHVlLCAiV2UgZXhwZWN0IG5vcm1h
bGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50byB0aGlzIGZ1bmN0aW9uLiIpOworCisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzRG91Ymxl
KCkpIHsKKyAgICAgICAgZG91YmxlIGQgPSB2YWx1ZS5hc0RvdWJsZSgpOworICAgICAgICBpZiAo
IXN0ZDo6aXNuYW4oZCkpIHsKKyAgICAgICAgICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50Pihk
KTsKKyAgICAgICAgICAgIGlmIChpID09IGQpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBqc051
bWJlcihpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewor
ICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgICAgICBjb25z
dCBTdHJpbmcmIHd0ZlN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgICAgIGlmIChV
TkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gVUlOVF9NQVg7
CisgICAgICAgIHJldHVybiB3dGZTdHJpbmcuaW1wbCgpLT5oYXNoKCk7CisgICAgfQorCisgICAg
YXV0byBXYW5nc0ludDY0SGFzaCA9IFtdICh1aW50NjRfdCBrZXkpIC0+IHVpbnQzMl90IHsKKyAg
ICAgICAga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gMjIpOwor
ICAgICAgICBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgICAgICBrZXkgXj0gKGtleSA+PiA4KTsK
KyAgICAgICAga2V5ICs9IChrZXkgPDwgMyk7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDE1KTsK
KyAgICAgICAga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gMzEp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSk7CisgICAgfTsKKyAg
ICB1aW50NjRfdCByYXdWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgcmV0dXJu
IFdhbmdzSW50NjRIYXNoKHJhd1ZhbHVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hN
YXBCdWNrZXRUeXBlPgorY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICB0
eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHR5cGVkZWYgSGFzaE1hcEJ1ZmZlcjxIYXNoTWFwQnVj
a2V0VHlwZT4gSGFzaE1hcEJ1ZmZlclR5cGU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9
IEhhc2hNYXBCdWNrZXRUeXBlPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxz
dGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojp2YWx1
ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbFNldFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IEhhc2hNYXBCdWNrZXRUeXBlPgorICAgIHN0YXRpYyB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldDxIYXNo
TWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RT
dHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBJbXBsTWFw
U3RydWN0dXJlLmdldCgpOworICAgIH0KKworcHVibGljOgorICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEhhc2hNYXBJbXBsKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisg
ICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+OjpvZmZzZXRPZktleSgpID09IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXlWYWx1ZT46Om9mZnNldE9mS2V5KCksICJXZSBhc3N1bWUgdGhpcyB0byBiZSB0cnVl
IGluIHRoZSBERkcgYW5kIEZUTCBKSVQuIik7CisKKyAgICAgICAgSGFzaE1hcEltcGwqIGltcGwg
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNoTWFwSW1wbD4odm0uaGVhcCkpIEhhc2hN
YXBJbXBsKHZtLCBzZWxlY3RTdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgaW1wbC0+ZmluaXNoQ3Jl
YXRpb24oZXhlYywgdm0pOworICAgICAgICByZXR1cm4gaW1wbDsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgc3RhdGlj
IHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tlbik7
CisKKyAgICBIYXNoTWFwSW1wbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAg
ICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAgICAgLCBt
X2RlbGV0ZUNvdW50KDApCisgICAgICAgICwgbV9jYXBhY2l0eSg0KQorICAgIHsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5nZXQoKS0+YnVmZmVyKCk7CisgICAgfQorCisg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSkKKyAgICB7Cisg
ICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgQmFz
ZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZXhl
Yywgdm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1faGVhZC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNr
ZXRUeXBlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwgdGhpcywgSGFzaE1h
cEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSkpOworCisgICAgICAgIG1faGVhZC0+c2V0TmV4dCh2bSwg
bV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkp
OworICAgICAgICBtX2hlYWQtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAgIG1fdGFpbC0+c2V0
RGVsZXRlZCh0cnVlKTsKKworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0VHlwZSog
ZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhhc2hNYXBC
dWNrZXRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigtMSkpOworICAgIH0KKworICAgIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFbXB0eShIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBlbXB0eVZhbHVlKCk7CisgICAgfQor
CisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXRUeXBlKiBkZWxldGVkVmFsdWUoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0VHlwZSo+KHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oLTMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IGlzRGVsZXRlZChIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJ1Y2tldCA9PSBkZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
a2V5KQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgdWludDMy
X3QgaGFzaCA9IGpzTWFwSGFzaChleGVjLCB2bSwga2V5KTsKKyAgICAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBm
aW5kQnVja2V0KGV4ZWMsIGtleSwgaGFzaCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBI
YXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtl
eSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAgIGtleSA9IG5vcm1hbGl6ZU1hcEtleShr
ZXkpOworICAgICAgICByZXR1cm4gZmluZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3JtYWxpemVk
KGV4ZWMsIGtleSwgaGFzaCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdl
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgaWYgKEhhc2hN
YXBCdWNrZXRUeXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpKQorICAgICAgICAg
ICAgcmV0dXJuICgqYnVja2V0KS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhZmluZEJ1Y2tldChleGVjLCBr
ZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICB7CisgICAgICAg
IGtleSA9IG5vcm1hbGl6ZU1hcEtleShrZXkpOworCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAg
ICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIHVpbnQz
Ml90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBrZXkpICYgbWFzazsKKyAgICAgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAgICAgICAg
SGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIHdoaWxl
ICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZChidWNrZXQp
ICYmIGFyZUtleXNFcXVhbChleGVjLCBrZXksIGJ1Y2tldC0+a2V5KCkpKSB7CisgICAgICAgICAg
ICAgICAgYnVja2V0LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNr
OworICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgfQorCisgICAg
ICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXdFbnRyeSA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAg
YnVmZmVyW2luZGV4XSA9IG5ld0VudHJ5OworICAgICAgICBuZXdFbnRyeS0+c2V0S2V5KHZtLCBr
ZXkpOworICAgICAgICBuZXdFbnRyeS0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAgICAgICAgbmV3
RW50cnktPnNldERlbGV0ZWQoZmFsc2UpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV3
VGFpbCA9IEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBtX3RhaWwuc2V0
KHZtLCB0aGlzLCBuZXdUYWlsKTsKKyAgICAgICAgbmV3VGFpbC0+c2V0UHJldih2bSwgbmV3RW50
cnkpOworICAgICAgICBuZXdUYWlsLT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBuZXdFbnRy
eS0+c2V0TmV4dCh2bSwgbmV3VGFpbCk7CisgICAgICAgIHVpbnQzMl90IG5ld1NpemUgPSArK21f
c2l6ZTsKKyAgICAgICAgaWYgKDIqbmV3U2l6ZSA+IG1fY2FwYWNpdHkpCisgICAgICAgICAgICBy
ZWhhc2goZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIHJlbW92ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5
cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSk7CisgICAgICAgIGlmICghYnVja2V0
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBpbXBsID0gKmJ1Y2tldDsKKyAgICAgICAg
aW1wbC0+bmV4dCgpLT5zZXRQcmV2KHZtLCBpbXBsLT5wcmV2KCkpOworICAgICAgICBpbXBsLT5w
cmV2KCktPnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7CisgICAgICAgIGltcGwtPnNldERlbGV0
ZWQodHJ1ZSk7CisKKyAgICAgICAgKmJ1Y2tldCA9IGRlbGV0ZWRWYWx1ZSgpOworCisgICAgICAg
IG1fZGVsZXRlQ291bnQrKzsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHVpbnQzMl90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQobV9zaXplID49IG1fZGVsZXRlQ291bnQpOworICAgICAgICByZXR1cm4gbV9zaXpl
IC0gbV9kZWxldGVDb3VudDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXIo
RXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICAgICAgbV9zaXplID0gMDsKKyAgICAgICAgbV9kZWxldGVDb3VudCA9IDA7CisgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBoZWFkID0gbV9oZWFkLmdldCgpOworICAgICAgICBIYXNoTWFwQnVj
a2V0VHlwZSogYnVja2V0ID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRU
eXBlKiB0YWlsID0gbV90YWlsLmdldCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICE9IHRhaWwp
IHsKKyAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXh0ID0gYnVja2V0LT5uZXh0KCk7
CisgICAgICAgICAgICAvLyBXZSByZXN0YXJ0IGVhY2ggaXRlcmF0b3IgYnkgcG9pbnRpbmcgaXQg
dG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgICAgICAgICAgICBidWNrZXQtPnNldE5leHQodm0s
IGhlYWQpOworICAgICAgICAgICAgYnVja2V0ID0gbmV4dDsKKyAgICAgICAgfQorICAgICAgICBt
X2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJl
dih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9jYXBhY2l0eSA9IDQ7CisgICAgICAgIG1h
a2VBbmRTZXROZXdCdWZmZXIoZXhlYywgdm0pOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
c2l6ZV90IGJ1ZmZlclNpemVJbkJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2NhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXRUeXBlKik7CisgICAgfQorCisgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ1ZmZlcigpCisgICAgeworICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPiwgbV9idWZmZXIpOwor
ICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYXBhY2l0eSgpCisgICAgewor
ICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRU
eXBlPiwgbV9jYXBhY2l0eSk7CisgICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQo
KSB7IHJldHVybiBtX2hlYWQuZ2V0KCk7IH0KKyAgICBIYXNoTWFwQnVja2V0VHlwZSogdGFpbCgp
IHsgcmV0dXJuIG1fdGFpbC5nZXQoKTsgfQorCisgICAgc2l6ZV90IGFwcHJveGltYXRlU2l6ZSgp
IGNvbnN0CisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihIYXNoTWFwSW1wbCk7
CisgICAgICAgIHNpemUgKz0gYnVmZmVyU2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgc2l6ZSArPSAy
ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXRUeXBlKTsgLy8gSGVhZCBhbmQgdGFpbCBtZW1iZXJzLgor
ICAgICAgICBzaXplICs9IChtX2RlbGV0ZUNvdW50ICsgbV9zaXplKSAqIHNpemVvZihIYXNoTWFw
QnVja2V0VHlwZSk7IC8vIE51bWJlciBvZiBtZW1iZXJzIG9uIHRoZSBsaXN0LgorICAgICAgICBy
ZXR1cm4gc2l6ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0VHlwZSoqIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXplZChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAgY29u
c3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1aW50MzJfdCBpbmRl
eCA9IGhhc2ggJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRo
aXMtPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVy
W2luZGV4XTsKKworICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAgICAgICAg
ICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVLZXlzRXF1YWwoZXhlYywga2V5LCBidWNr
ZXQtPmtleSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7CisgICAg
ICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1Y2tldCA9
IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgICAgIG1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5ICogMjsKKyAgICAgICAg
bWFrZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29w
ZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIGl0ZXIgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5
cGUqIGVuZCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1f
Y2FwYWNpdHkgLSAxOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fY2FwYWNpdHkgJiAobV9j
YXBhY2l0eSAtIDEpKSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhp
cy0+YnVmZmVyKCk7CisgICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgeworICAgICAgICAgICAg
dWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0sIGl0ZXItPmtleSgpKSAmIG1hc2s7
CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzY29wZS5leGNlcHRpb24oKSwgIkFs
bCBrZXlzIHNob3VsZCBhbHJlYWR5IGJlIGhhc2hlZCBiZWZvcmUsIHNvIHRoaXMgc2hvdWxkIG5v
dCB0aHJvdyBiZWNhdXNlIGl0IHdvbid0IHJlc29sdmUgcm9wZXMuIik7CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRl
eF07CisgICAgICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICAgICAg
ICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnVmZmVyW2luZGV4XSA9IGl0ZXI7CisgICAgICAgICAgICBpdGVy
ID0gaXRlci0+bmV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBtYWtlQW5kU2V0
TmV3QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKworICAgICAgICBIYXNoTWFwQnVm
ZmVyVHlwZSogYnVmZmVyID0gSGFzaE1hcEJ1ZmZlclR5cGU6OmNyZWF0ZShleGVjLCB2bSwgdGhp
cywgbV9jYXBhY2l0eSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX2J1ZmZlci5zZXQodm0sIHRoaXMsIGJ1ZmZlcik7Cisg
ICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAgICAgICAgICAgIEFTU0VSVChpc0Vt
cHR5KHRoaXMtPmJ1ZmZlcigpW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBXcml0ZUJh
cnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1faGVhZDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1h
cEJ1Y2tldFR5cGU+IG1fdGFpbDsKKyAgICBDb3B5QmFycmllcjxIYXNoTWFwQnVmZmVyVHlwZT4g
bV9idWZmZXI7CisgICAgdWludDMyX3QgbV9zaXplOworICAgIHVpbnQzMl90IG1fZGVsZXRlQ291
bnQ7CisgICAgdWludDMyX3QgbV9jYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHJldmlzaW9u
IDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIGVudW0gSlNfRVhQT1JUX1BSSVZBVEUgSW50
cmluc2ljIHsKICAgICBJc1JlZ0V4cE9iamVjdEludHJpbnNpYywKICAgICBJc1R5cGVkQXJyYXlW
aWV3SW50cmluc2ljLAogICAgIEJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEludHJpbnNpYywK
KyAgICBKU01hcEdldEludHJpbnNpYywKKyAgICBKU01hcEhhc0ludHJpbnNpYywKKyAgICBKU1Nl
dEhhc0ludHJpbnNpYywKIAogICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAgIFR5cGVkQXJy
YXlMZW5ndGhJbnRyaW5zaWMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw2ICs2MDYsOSBAQCBp
bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTQ2VsbCogYSwgCiAKIGJvb2wgaXNUaGlzVmFs
dWVBbHRlcmVkKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIEpTT2JqZWN0KiBiYXNlT2JqZWN0KTsK
IAorLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLXNhbWV2YWx1ZQorYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBhLCBKU1Zh
bHVlIGIpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTQ0pTVmFsdWVfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5s
aW5lcy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU4LDYgKzEwNTgsMjIg
QEAgQUxXQVlTX0lOTElORSBib29sIGlzVGhpc1ZhbHVlQWx0ZXJlZChjbwogICAgIHJldHVybiB0
cnVlOwogfQogCisvLyBTZWUgc2VjdGlvbiA3LjIuOTogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9l
Y21hMjYyLyNzZWMtc2FtZXZhbHVlCitBTFdBWVNfSU5MSU5FIGJvb2wgc2FtZVZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgaWYgKCFhLmlzTnVtYmVy
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBhLCBiKTsKKyAg
ICBpZiAoIWIuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRvdWJsZSB4
ID0gYS5hc051bWJlcigpOworICAgIGRvdWJsZSB5ID0gYi5hc051bWJlcigpOworICAgIGJvb2wg
eElzTmFOID0gc3RkOjppc25hbih4KTsKKyAgICBib29sIHlJc05hTiA9IHN0ZDo6aXNuYW4oeSk7
CisgICAgaWYgKHhJc05hTiB8fCB5SXNOYU4pCisgICAgICAgIHJldHVybiB4SXNOYU4gJiYgeUlz
TmFOOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpID09IGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4oeSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNW
YWx1ZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDEs
NyArNjQxLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcgogICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5SZWZsZWN0
LCByZWZsZWN0T2JqZWN0LCBEb250RW51bSk7CiAKICAgICBtX21vZHVsZUxvYWRlclN0cnVjdHVy
ZS5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9tb2R1bGVMb2FkZXIuc2V0
KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKHZtLCB0aGlzLCBtX21vZHVsZUxvYWRl
clN0cnVjdHVyZS5nZXQoKSkpOworICAgIG1fbW9kdWxlTG9hZGVyLnNldCh2bSwgdGhpcywgSlNN
b2R1bGVMb2FkZXI6OmNyZWF0ZShnbG9iYWxFeGVjKCksIHZtLCB0aGlzLCBtX21vZHVsZUxvYWRl
clN0cnVjdHVyZS5nZXQoKSkpOwogICAgIGlmIChPcHRpb25zOjpleHBvc2VJbnRlcm5hbE1vZHVs
ZUxvYWRlcigpKQogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJv
cGVydHlOYW1lcy0+TG9hZGVyLCBtX21vZHVsZUxvYWRlci5nZXQoKSwgRG9udEVudW0pOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCShyZXZpc2lvbiAyMDUz
MDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI2LDc4ICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkpTTWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKLSNpbmNsdWRl
ICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2lu
Y2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENs
YXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRF
X01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAotdm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNl
bGwpCi17Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAg
ICB0aGlzT2JqZWN0LT5KU01hcDo6fkpTTWFwKCk7Ci19Ci0KLXNpemVfdCBKU01hcDo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNNYXAqPihjZWxsKTsKLSAgICBzaXplX3QgbWFwRGF0YVNpemUgPSB0aGlzT2JqZWN0LT5tX21h
cERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUo
Y2VsbCkgKyBtYXBEYXRhU2l6ZTsKLX0KLQogU3RyaW5nIEpTTWFwOjp0b1N0cmluZ05hbWUoY29u
c3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIk9i
amVjdCIpOwogfQogCi12b2lkIEpTTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNp
dG9yKTsKLSAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4o
Y2VsbCwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxs
KiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewotICAgIEJh
c2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwotICAgIGpzQ2FzdDxK
U01hcCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7
Ci19Ci0KLWJvb2wgSlNNYXA6OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQotewot
ICAgIHJldHVybiBtX21hcERhdGEuY29udGFpbnMoZXhlYywga2V5KTsKLX0KLQotc2l6ZV90IEpT
TWFwOjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLnNpemUo
ZXhlYyk7Ci19Ci0KLUpTVmFsdWUgSlNNYXA6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
a2V5KQotewotICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9tYXBEYXRhLmdldChleGVjLCBrZXkpOwot
ICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi12b2lkIEpTTWFwOjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBtX21hcERhdGEuc2V0KGV4ZWMsIHRoaXMsIGtl
eSwgdmFsdWUpOwotfQotCi12b2lkIEpTTWFwOjpjbGVhcihFeGVjU3RhdGUqKQotewotICAgIG1f
bWFwRGF0YS5jbGVhcigpOwotfQotCi1ib29sIEpTTWFwOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSkKLXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLnJlbW92ZShleGVjLCBrZXkp
OwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEwOCArMjYsNDkgQEAKICNpZm5kZWYgSlNNYXBfaAogI2RlZmlu
ZSBKU01hcF9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUg
IkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcEJhc2UuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTTWFwSXRlcmF0b3I7CiAKLWNsYXNzIEpTTWFw
IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTTWFwIDogcHVibGljIE1h
cEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4geworICAgIHR5
cGVkZWYgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+PiBC
YXNlOwogcHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKLQog
ICAgIGZyaWVuZCBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi0gICAgLy8gT3VyIG1hcmtpbmcgZnVu
Y3Rpb25zIGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxs
Ci0gICAgLy8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgotICAgIGNsYXNzIEVudHJ5
IHsKLSAgICBwcml2YXRlOgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7Ci0g
ICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOwotCi0gICAgcHVibGljOgotICAg
ICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX2tleTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFdy
aXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbV92YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJl
bihTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICAgICAgewotICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmQoJm1fa2V5KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25l
ciwgSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3du
ZXIsIGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJh
cnJpZXIoSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0VmFsdWUo
Vk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX3ZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5jbGVhcigp
OwotICAgICAgICAgICAgbV92YWx1ZS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAg
IHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnksIEpTTWFwSXRlcmF0b3I+IE1hcERhdGE7Ci0KICAg
ICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3Ry
dWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90
b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTTWFwVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSlNNYXAqIGluc3Rh
bmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNYXA+KHZtLmhlYXApKSBKU01hcCh2
bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAg
ICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdl
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNy
ZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gbV9tYXAtPmdldChl
eGVjLCBrZXkpOwogICAgIH0KIAotICAgIGJvb2wgaGFzKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwot
ICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopOwotICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0KEV4ZWNTdGF0ZSosIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSopOwot
ICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIG1fbWFwLT5hZGQoZXhlYywga2V5LCB2YWx1ZSk7CisgICAgfQogCiBwcml2
YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fbWFwRGF0YSh2bSwgdGhpcykKICAgICB7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMg
c2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJp
bmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0KLSAgICBNYXBE
YXRhIG1fbWFwRGF0YTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRl
cmF0b3IuaCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUgIkNvbW1vbklk
ZW50aWZpZXJzLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRl
ICJKU01hcC5oIgpAQCAtNDEsNiArNDQsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFw
LnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0ZXJhdG9yKHZtLCBtX21h
cC0+aW1wbCgpLT5oZWFkKCkpOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTQ5LDYgKzUzLDcgQEAg
dm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX21hcCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7CiB9CiAK
IEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwg
SlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCkBAIC02Miw4ICs2Nyw5IEBAIEpTVmFsdWUgSlNN
YXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNNYXBJdGVyYXRvciogSlNNYXBJdGVy
YXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBKU01hcEl0
ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgp
LT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwgbV9raW5kKTsKLSAgICBjbG9u
ZS0+bV9pdGVyYXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAg
ICBhdXRvIGNsb25lID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxsZWUoKS0+
Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgpLCBtX2tp
bmQpOworICAgIGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAgICByZXR1
cm4gY2xvbmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTTWFwSXRlcmF0b3IgOiBwdWJsaWMgSlNOb25G
aW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+IEhhc2hNYXBCdWNrZXQ7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFs
T2JqZWN0IEJhc2U7CiAKQEAgLTUxLDUyICs1Miw2MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldCogYWR2YW5j
ZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8
SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLm5leHQocGFp
cikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIHByZXYgPSBtX2l0ZXIuZ2V0KCk7CisgICAgICAg
IGlmICghcHJldikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBIYXNoTWFw
QnVja2V0KiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAm
JiBidWNrZXQtPmRlbGV0ZWQoKSkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAg
ICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICgh
YnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJh
dG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZh
bHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGwg
bmV4dCgpLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKyAgICBib29sIG5leHQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNr
ZXQqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBpZiAobV9raW5kID09IEl0ZXJhdGVW
YWx1ZSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci52YWx1ZTsKKyAgICAgICAgICAgIHZhbHVl
ID0gYnVja2V0LT52YWx1ZSgpOwogICAgICAgICBlbHNlIGlmIChtX2tpbmQgPT0gSXRlcmF0ZUtl
eSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci5rZXk7CisgICAgICAgICAgICB2YWx1ZSA9IGJ1
Y2tldC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFp
cihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLnZhbHVlKTsKKyAgICAgICAgICAgIHZhbHVlID0g
Y3JlYXRlUGFpcihleGVjLCBidWNrZXQtPmtleSgpLCBidWNrZXQtPnZhbHVlKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBib29sIG5leHRLZXlWYWx1ZShKU1ZhbHVlJiBr
ZXksIEpTVmFsdWUmIHZhbHVlKQorICAgIGJvb2wgbmV4dEtleVZhbHVlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIFdURjo6S2V5
VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRv
ci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBhZHZhbmNlSXRl
cihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICAgICAga2V5ID0gcGFpci5rZXk7Ci0gICAgICAgIHZhbHVlID0gcGFpci52YWx1ZTsK
KyAgICAgICAga2V5ID0gYnVja2V0LT5rZXkoKTsKKyAgICAgICAgdmFsdWUgPSBidWNrZXQtPnZh
bHVlKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoKCkK
LSAgICB7Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7Ci0gICAgfQotCiAgICAgSXRlcmF0
aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgSlNWYWx1ZSBpdGVy
YXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9tYXAuZ2V0KCk7IH0KICAgICBKU01hcEl0ZXJh
dG9yKiBjbG9uZShFeGVjU3RhdGUqKTsKIAotICAgIEpTTWFwOjpNYXBEYXRhOjpJdGVyYXRvckRh
dGEqIGl0ZXJhdG9yRGF0YSgpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faXRlcmF0b3I7Ci0g
ICAgfQotCiBwcml2YXRlOgotICAgIEpTTWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgSlNNYXAqIGl0ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisgICAg
SlNNYXBJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCosIEl0ZXJh
dGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwg
bV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bV9tYXBEYXRhLmNyZWF0ZUl0ZXJhdG9yRGF0YSh0
aGlzKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICB7IH0KKworICAgIHZvaWQgc2V0SXRl
cmF0b3IoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCiAgICAgeworICAgICAgICBtX2l0
ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQpOwogICAgIH0KIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCopOwpAQCAtMTA0LDcgKzEx
NSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsKLSAgICBKU01h
cDo6TWFwRGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJyaWVyPEhh
c2hNYXBCdWNrZXQ+IG1faXRlcjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiBTVEFU
SUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNNYXBJdGVyYXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3Bw
CShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01v
ZHVsZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDExICs1NSwxNCBAQCBKU01vZHVs
ZUxvYWRlcjo6SlNNb2R1bGVMb2FkZXIoVk0mIHZtLCBTCiB7CiB9CiAKLXZvaWQgSlNNb2R1bGVM
b2FkZXI6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVj
dCkKK3ZvaWQgSlNNb2R1bGVMb2FkZXI6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywg
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgcHV0RGly
ZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgInJlZ2lzdHJ5IiksIEpTTWFwOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpKTsKKyAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVh
dGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVy
Ojpmcm9tU3RyaW5nKCZ2bSwgInJlZ2lzdHJ5IiksIG1hcCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVM
b2FkZXIuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgUmVhZHkgPSA2LAogICAgIH07CiAKLSAgICBzdGF0aWMgSlNNb2R1bGVM
b2FkZXIqIGNyZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU01vZHVsZUxvYWRlciogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTW9kdWxlTG9hZGVyKiBvYmplY3QgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU01vZHVsZUxvYWRlcj4odm0uaGVhcCkpIEpTTW9k
dWxlTG9hZGVyKHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9u
KHZtLCBnbG9iYWxPYmplY3QpOworICAgICAgICBvYmplY3QtPmZpbmlzaENyZWF0aW9uKGV4ZWMs
IHZtLCBnbG9iYWxPYmplY3QpOwogICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgIH0KIApAQCAt
NzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgSlNWYWx1ZSBldmFsdWF0ZShFeGVjU3RhdGUqLCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSBtb2R1bGVSZWNvcmQsIEpTVmFsdWUgaW5pdGlhdG9yKTsKIAog
cHJvdGVjdGVkOgotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCop
OworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgVk0mLCBKU0dsb2JhbE9iamVj
dCopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ3LDE0ICs0NywxNyBAQCB2b2lkIEpTTW9kdWxlUmVjb3JkOjpkZXN0cm95
KEpTQ2VsbCogY2VsCiAgICAgdGhpc09iamVjdC0+SlNNb2R1bGVSZWNvcmQ6On5KU01vZHVsZVJl
Y29yZCgpOwogfQogCi12b2lkIEpTTW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
Cit2b2lkIEpTTW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sIEFTQ0lJTGl0ZXJhbCgicmVnaXN0cnlFbnRyeSIpKSwganNVbmRlZmluZWQoKSk7CiAgICAg
cHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJl
dmFsdWF0ZWQiKSksIGpzQm9vbGVhbihmYWxzZSkpOwogCi0gICAgbV9kZXBlbmRlbmNpZXNNYXAu
c2V0KHZtLCB0aGlzLCBKU01hcDo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QoKS0+bWFwU3RydWN0
dXJlKCkpKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
SlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIGdsb2JhbE9iamVjdCgpLT5tYXBT
dHJ1Y3R1cmUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3BlLmV4Y2VwdGlvbigpKTsKKyAg
ICBtX2RlcGVuZGVuY2llc01hcC5zZXQodm0sIHRoaXMsIG1hcCk7CiAgICAgcHV0RGlyZWN0KHZt
LCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJkZXBlbmRlbmNpZXNN
YXAiKSksIG1fZGVwZW5kZW5jaWVzTWFwLmdldCgpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCShyZXZpc2lvbiAyMDUzMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZVJlY29yZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NywxMCArODcsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpT
TW9kdWxlUmVjb3JkKiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3Qg
SWRlbnRpZmllciYgbW9kdWxlS2V5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBjb25z
dCBWYXJpYWJsZUVudmlyb25tZW50JiBkZWNsYXJlZFZhcmlhYmxlcywgY29uc3QgVmFyaWFibGVF
bnZpcm9ubWVudCYgbGV4aWNhbFZhcmlhYmxlcykKKyAgICBzdGF0aWMgSlNNb2R1bGVSZWNvcmQq
IGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwg
Y29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMsIGNvbnN0IFZhcmlh
YmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCiAgICAgewogICAgICAgICBKU01vZHVs
ZVJlY29yZCogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU01vZHVsZVJl
Y29yZD4odm0uaGVhcCkpIEpTTW9kdWxlUmVjb3JkKHZtLCBzdHJ1Y3R1cmUsIG1vZHVsZUtleSwg
c291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxleGljYWxWYXJpYWJsZXMpOwotICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24oZXhlYywgdm0pOwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCkBA
IC0xNTIsNyArMTUyLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYpOworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiwgVk0m
KTsKIAogICAgIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBnZXRNb2R1bGVOYW1lc3BhY2UoRXhl
Y1N0YXRlKik7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJ
KHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNzAgKzI2LDEzIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSlNTZXQuaCIKIAotI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5o
IgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNTZXRJdGVyYXRv
ci5oIgotI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgotCiBuYW1lc3BhY2UgSlND
IHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2V0OjpzX2luZm8gPSB7ICJTZXQiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2V0KSB9OwogCi12b2lkIEpTU2V0OjpkZXN0
cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Nl
dCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPkpTU2V0Ojp+SlNTZXQoKTsKLX0KLQogU3RyaW5n
IEpTU2V0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKQogewogICAg
IHJldHVybiBBU0NJSUxpdGVyYWwoIk9iamVjdCIpOwogfQogCi1zaXplX3QgSlNTZXQ6OmVzdGlt
YXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTU2V0Kj4oY2VsbCk7Ci0gICAgc2l6ZV90IHNldERhdGFTaXplID0gdGhpc09iamVjdC0+bV9z
ZXREYXRhLmNhcGFjaXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwpICsgc2V0RGF0YVNpemU7Ci19Ci0KLXZvaWQgSlNTZXQ6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEu
dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLX0KLQotdm9pZCBKU1NldDo6Y29weUJhY2tp
bmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG9r
ZW4pCi17Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9yLCB0b2tlbik7
Ci0gICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2luZ1N0b3JlKHZp
c2l0b3IsIHRva2VuKTsKLX0KLQotYm9vbCBKU1NldDo6aGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9zZXREYXRhLmNvbnRhaW5zKGV4ZWMsIHZhbHVl
KTsKLX0KLQotc2l6ZV90IEpTU2V0OjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gbV9zZXREYXRhLnNpemUoZXhlYyk7Ci19Ci0KLXZvaWQgSlNTZXQ6OmFkZChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgbV9zZXREYXRhLnNldChleGVjLCB0aGlzLCB2
YWx1ZSwgdmFsdWUpOwotfQotCi12b2lkIEpTU2V0OjpjbGVhcihFeGVjU3RhdGUqKQotewotICAg
IG1fc2V0RGF0YS5jbGVhcigpOwotfQotCi1ib29sIEpTU2V0OjpyZW1vdmUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBtX3NldERhdGEucmVtb3ZlKGV4ZWMs
IHZhbHVlKTsKLX0KLQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5o
CShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMDMgKzI2LDQ1IEBACiAjaWZuZGVmIEpTU2V0X2gK
ICNkZWZpbmUgSlNTZXRfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBC
YXNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1NldEl0ZXJhdG9yOwogCi1jbGFz
cyBKU1NldCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU1NldCA6IHB1
YmxpYyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiB7CisgICAg
dHlwZWRlZiBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiBCYXNl
OwogcHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAogICAg
IGZyaWVuZCBjbGFzcyBKU1NldEl0ZXJhdG9yOwogCi0gICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rp
b25zIGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCi0g
ICAgLy8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgotICAgIGNsYXNzIEVudHJ5IHsK
LSAgICBwcml2YXRlOgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7Ci0KLSAg
ICBwdWJsaWM6Ci0gICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYga2V5KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9Ci0KLSAg
ICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSgpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX2tleTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQg
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICAgICAgewotICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0
S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mLCBjb25zdCBKU0NlbGwqLCBKU1ZhbHVl
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBKU1NldEl0ZXJhdG9yPiBTZXREYXRhOwotCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU1NldFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTU2V0KiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU2V0Pih2bS5oZWFwKSkgSlNTZXQodm0s
IHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUo
ZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgbV9tYXAtPmFkZChleGVjLCBrZXkpOwog
ICAgIH0KIAotICAgIGJvb2wgaGFzKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIHNpemVfdCBz
aXplKEV4ZWNTdGF0ZSopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkKEV4ZWNTdGF0
ZSosIEpTVmFsdWUpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKik7Ci0gICAgYm9vbCByZW1v
dmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0KIHByaXZhdGU6CiAgICAgSlNTZXQoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAg
ICAgICwgbV9zZXREYXRhKHZtLCB0aGlzKQogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0Nl
bGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRv
ciYsIENvcHlUb2tlbik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNP
YmplY3QqLCBFeGVjU3RhdGUqKTsKLQotICAgIFNldERhdGEgbV9zZXREYXRhOwogfTsKIAogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIHZvaWQgSlNT
ZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7CisgICAg
c2V0SXRlcmF0b3Iodm0sIG1fc2V0LT5pbXBsKCktPmhlYWQoKSk7CiB9CiAKIHZvaWQgSlNTZXRJ
dGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQpAQCAtNDksNiArNTAsNyBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwog
ICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9pdGVyKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKQEAgLTYyLDgg
KzY0LDkgQEAgSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcgogCiBKU1Nl
dEl0ZXJhdG9yKiBKU1NldEl0ZXJhdG9yOjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAg
YXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5jYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fc2V0LmdldCgp
LCBtX2tpbmQpOwotICAgIGNsb25lLT5tX2l0ZXJhdG9yID0gbV9pdGVyYXRvcjsKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2xvbmUgPSBKU1NldEl0ZXJhdG9yOjpjcmVhdGUo
dm0sIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUo
KSwgbV9zZXQuZ2V0KCksIG1fa2luZCk7CisgICAgY2xvbmUtPnNldEl0ZXJhdG9yKHZtLCBtX2l0
ZXIuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjA1MzA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNTZXRJdGVy
YXRvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+IEhhc2hNYXBCdWNrZXQ7CiBwdWJsaWM6CiAgICAgdHlw
ZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKQEAgLTUyLDQ2ICs1Myw1OSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5leHQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1h
cEJ1Y2tldCogYWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAgICAgICAgV1RG
OjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYgKCFtX2l0
ZXJhdG9yLm5leHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXQqIHByZXYgPSBtX2l0ZXIu
Z2V0KCk7CisgICAgICAgIGlmICghcHJldikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKKyAgICAgICAg
d2hpbGUgKGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkgeworICAgICAgICAgICAgcHJldiA9
IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9
CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52
bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9Cisg
ICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVy
IG9uIHRoZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1
bmN0aW9uIGlzIGNhbGwgbmV4dCgpLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKwor
ICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7CisgICAgICAg
IGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgIGlmICht
X2tpbmQgPT0gSXRlcmF0ZVZhbHVlIHx8IG1fa2luZCA9PSBJdGVyYXRlS2V5KQotICAgICAgICAg
ICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT5rZXkoKTsK
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxGcmFtZSwg
cGFpci5rZXksIHBhaXIua2V5KTsKKyAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihleGVj
LCBidWNrZXQtPmtleSgpLCBidWNrZXQtPmtleSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgdm9pZCBmaW5pc2goKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5p
c2goKTsKLSAgICB9Ci0KICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQ7IH0KICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Nl
dC5nZXQoKTsgfQogICAgIEpTU2V0SXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0gICAg
SlNTZXQ6OlNldERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNTZXRJdGVy
YXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCogaXRlcmF0ZWRPYmplY3Qs
IEl0ZXJhdGlvbktpbmQga2luZCkKKyAgICBKU1NldEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX3Nl
dERhdGEuY3JlYXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQog
ICAgIHsKICAgICB9CiAKKyAgICB2b2lkIHNldEl0ZXJhdG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tl
dCogYnVja2V0KQorICAgIHsKKyAgICAgICAgbV9pdGVyLnNldE1heUJlTnVsbCh2bSwgdGhpcywg
YnVja2V0KTsgCisgICAgfQorCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVh
dGlvbihWTSYsIEpTU2V0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBjcmVhdGVQ
YWlyKENhbGxGcmFtZSosIEpTVmFsdWUsIEpTVmFsdWUpOwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU1Nl
dD4gbV9zZXQ7Ci0gICAgSlNTZXQ6OlNldERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9yOwor
ICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2lu
ZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpT
U2V0SXRlcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJ
KHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4MiwxMCBAQCBlbnVtIEpTVHlwZSA6IHVpbnQ4
X3QgewogICAgIE1vZHVsZUVudmlyb25tZW50VHlwZSwKICAgICBSZWdFeHBPYmplY3RUeXBlLAog
ICAgIFByb3h5T2JqZWN0VHlwZSwKKyAgICBKU01hcFR5cGUsCisgICAgSlNTZXRUeXBlLAogCi0g
ICAgTGFzdEpTQ09iamVjdFR5cGUgPSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVj
dFR5cGUgPSBKU1NldFR5cGUsCiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9
PSBzaXplb2YodWludDhfdCksIHNpemVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFwQmFzZS5oIgorCisjaW5j
bHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+Cit2b2lkIE1hcEJhc2U8SGFzaE1hcEJ1Y2tl
dFR5cGU+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
Cit7CisgICAgTWFwQmFzZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PE1hcEJhc2UqPihjZWxs
KTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBIYXNoTWFwQnVja2V0VHlwZT4KK3NpemVfdCBNYXBCYXNlPEhhc2hNYXBCdWNrZXRUeXBlPjo6
ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRl
ZFNpemUoY2VsbCkgKyBzdGF0aWNfY2FzdDxNYXBCYXNlKj4oY2VsbCktPm1fbWFwLT5hcHByb3hp
bWF0ZVNpemUoKTsKK30KKwordGVtcGxhdGUgY2xhc3MgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+PjsKK3RlbXBsYXRlIGNsYXNzIE1hcEJhc2U8SGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgorI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
SGFzaE1hcEJ1Y2tldFR5cGU+CitjbGFzcyBNYXBCYXNlIDogcHVibGljIEpTTm9uRmluYWxPYmpl
Y3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBJ
bXBsOworICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworcHVibGljOgorCisgICAg
dHlwZWRlZiBIYXNoTWFwQnVja2V0VHlwZSBCdWNrZXRUeXBlOworCisgICAgQUxXQVlTX0lOTElO
RSBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5z
aXplKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5oYXMoZXhlYywg
a2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiBl
eGVjKQorICAgIHsKKyAgICAgICAgbV9tYXAtPmNsZWFyKGV4ZWMpOworICAgIH0KKworICAgIEFM
V0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX21hcC0+cmVtb3ZlKGV4ZWMsIGtleSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX21hcC0+ZmluZEJ1Y2tldChleGVjLCBrZXksIGhhc2gpOworICAgIH0KKworICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZIYXNoTWFwSW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+LCBtX21hcCk7CisgICAg
fQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwSW1wbCogaW1wbCgpIHsgcmV0dXJuIG1fbWFw
LmdldCgpOyB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtKQorICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEhhc2hNYXBJbXBs
KiBpbXBsID0gSGFzaE1hcEltcGw6OmNyZWF0ZShleGVjLCB2bSk7CisgICAgICAgIGlmIChVTkxJ
S0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
bWFwLnNldCh2bSwgdGhpcywgaW1wbCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgTWFwQmFz
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpT
Q2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwSW1wbD4gbV9tYXA7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIs
OSArNjIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVj
LT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJl
ID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+
bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgSlNNYXAqIG1h
cCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7CisgICAgaWYgKFVOTElL
RUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShK
U1ZhbHVlKCkpOwotICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIG1hcFN0cnVj
dHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlm
IChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVy
YXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBN
YXBJdGVyYXRvcgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVyYXRvci0+bmV4dChj
YWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRl
SXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Ci0gICAgaXRl
cmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0
b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTQgKzcwLDEzIEBAIHZvaWQgTWFwUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBtYXBQcm90b0Z1bmND
bGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFByb3RvRnVuY0RlbGV0
ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7
Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZF
X0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+
Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldEludHJpbnNpYyk7Cisg
ICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSwgSlNNYXBIYXNJ
bnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiAgICAg
SlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jS2V5cywgRG9udEVu
dW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSwgbWFwUHJvdG9G
dW5jVmFsdWVzLCBEb250RW51bSwgMCk7CiAKLSAgICAvLyBQcml2YXRlIGdldCAvIHNldCBvcGVy
YXRpb25zLgotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIG1hcFByb3RvRnVu
Y0dldCwgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2
YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldEludHJpbnNp
Yyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVy
dHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jU2V0
LCBEb250RW51bSwgMik7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0gSlNGdW5jdGlvbjo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1l
cygpLmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVuY0VudHJpZXMpOwpA
QCAtOTMsMTYgKzkyLDIxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRNYXAoQ2Fs
bEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkgewor
ICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAgICAgICB0aHJvd1ZN
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUs
IHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgSlNNYXAq
IG1hcCA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAgIGlmICghbWFwKSB7
Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgi
TWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbWFwOworCisgICAgaWYgKExJS0VMWSh0aGlz
VmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKQorICAgICAgICByZXR1cm4ganND
YXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNj
b3BlLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0
IikpOworICAgIHJldHVybiBudWxscHRyOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdmFs
dWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbih2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09
IEpTTWFwVHlwZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3Rv
RnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTg5LDExICsxOTMsNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlS2V5
KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
anNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpOwotfQot
CiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3IoRXhl
Y1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKQEAgLTIwNiwxMyArMjA1LDEyIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxK
U01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU01hcEl0ZXJhdG9yKiBp
dGVyYXRvciA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAg
IEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShrZXks
IHZhbHVlKSkgeworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGV4ZWMsIGtleSwgdmFs
dWUpKSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJl
Y3RJbmRleChleGVjLCAwLCBrZXkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5k
ZXgoZXhlYywgMSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
RGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwyMiArMTkxLDYgQEAgdm9pZCBQ
cm9wZXJ0eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAgIG1fYXR0cmlidXRlcyAmPSB+
UmVhZE9ubHk7CiB9CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVWYWx1ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQotewotICAgIGlmICghYS5pc051bWJlcigp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7Ci0gICAg
aWYgKCFiLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb3VibGUgeCA9
IGEuYXNOdW1iZXIoKTsKLSAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKLSAgICBib29sIHhJ
c05hTiA9IHN0ZDo6aXNuYW4oeCk7Ci0gICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkpOwot
ICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQotICAgICAgICByZXR1cm4geElzTmFOICYmIHlJc05h
TjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHkpOwotfQotCiBib29sIFByb3BlcnR5RGVzY3JpcHRvcjo6ZXF1YWxUbyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CiB7CiAg
ICAgaWYgKG90aGVyLm1fdmFsdWUuaXNFbXB0eSgpICE9IG1fdmFsdWUuaXNFbXB0eSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0
b3IuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdldHRlclNldHRlcjsKIAotLy8gU2VlIEVTNS4xIDkuMTIK
LWJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwotCiBjbGFzcyBQ
cm9wZXJ0eURlc2NyaXB0b3IgewogcHVibGljOgogICAgIFByb3BlcnR5RGVzY3JpcHRvcigpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3Iu
Y3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
ZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDExIEBAIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9i
YWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rp
b246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9i
YWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRl
KGV4ZWMsIHZtLCBzZXRTdHJ1Y3R1cmUpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRp
b24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBK
U1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCBzZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFs
dWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRl
ZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9y
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3
ICs2MCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3IKIAogICAg
IGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1
bHQsIGZhbHNlKSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5l
ZCgpLCB0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nl
dFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyAr
NzAsNyBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YWRk
LCBzZXRQcm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgc2V0UHJvdG9GdW5j
Q2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQcm90b0Z1bmNEZWxl
dGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEp
OworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEsIEpTU2V0
SGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLCBz
ZXRQcm90b0Z1bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1bmN0aW9uKiB2YWx1
ZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmluZygpLCBzZXRQcm90
b0Z1bmNWYWx1ZXMpOwpAQCAtODcsMTYgKzg3LDE0IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpT
U2V0KiBnZXRTZXQoQ2FsbEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0
byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUu
aXNPYmplY3QoKSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewog
ICAgICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RF
cnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICB9Ci0gICAgSlNTZXQqIHNldCA9IGpzRHluYW1pY0Nhc3Q8SlNTZXQqPih0aGlzVmFsdWUpOwot
ICAgIGlmICghc2V0KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUs
IEFTQ0lJTGl0ZXJhbCgiU2V0IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVNldCBvYmplY3QiKSk7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gc2V0OworICAgIGlm
IChMSUtFTFkodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNTZXRUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIGpzQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7CisgICAgdGhyb3dUeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBu
b24tU2V0IG9iamVjdCIpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBA
IC0xODYsNyArMTg0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVu
YwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwgcmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICB9
Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNw
cAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiSlNJbnRlcm5h
bFByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAj
aW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb21p
c2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2lu
Y2x1ZGUgIkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgpAQCAtMjQ5LDYgKzI1MCwxMCBAQCBWTTo6
Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFdFQkFTU0VN
QkxZKQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNl
bmRpZgorICAgIGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOworICAgIGhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFw
QnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBI
YXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbE1hcFN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAKICAgICBp
dGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp0aGlz
LCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpLCAxKSkp
OwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZVN0
ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNiAr
MzMxLDEwIEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJsb2NrU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOwor
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmU7CisgICAgU3Ry
b25nPFN0cnVjdHVyZT4gaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3Ry
dWN0dXJlPiBoYXNoTWFwSW1wbFNldFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBo
YXNoTWFwSW1wbE1hcFN0cnVjdHVyZTsKIAogICAgIFN0cm9uZzxKU0NlbGw+IGl0ZXJhdGlvblRl
cm1pbmF0b3I7CiAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDktMDEgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBKU01hcCBhbmQgSlNT
ZXQgZmFzdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjA5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvTWFwQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXpl
KToKKwogMjAxNi0wOS0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgogCiAgICAgICAgIEZpeCBNYWMgQ01ha2UgYnVpbGQgYWZ0ZXIgcjIwNTI2Ni4KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFz
ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvTWFwQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNCBAQAorI2lmbmRlZiBX
ZWJDb3JlX0ZXRF9NYXBCYXNlX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfTWFwQmFzZV9oCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvTWFwQmFzZS5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjgsNyArMTM2OCw3IEBAIFNlcmlh
bGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXplcjoKICAgICAgICAgICAgIGNhc2UgTWFw
RGF0YVN0YXJ0VmlzaXRFbnRyeTogewogICAgICAgICAgICAgICAgIEpTTWFwSXRlcmF0b3IqIGl0
ZXJhdG9yID0gbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgSlNWYWx1
ZSBrZXksIHZhbHVlOwotICAgICAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHRLZXlWYWx1
ZShrZXksIHZhbHVlKSkgeworICAgICAgICAgICAgICAgIGlmICghaXRlcmF0b3ItPm5leHRLZXlW
YWx1ZShtX2V4ZWMsIGtleSwgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1hcEl0ZXJh
dG9yU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogb2Jq
ZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChqc0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7CkBAIC0yNTQ1LDcgKzI1NDUsOSBAQCBE
ZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6CiAgICAgICAgIG1hcE9iamVj
dFN0YXJ0U3RhdGU6IHsKICAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFjay5zaXplKCkg
PiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihKU1ZhbHVlKCksIFN0YWNrT3ZlcmZsb3dFcnJvcik7Ci0gICAgICAgICAgICBKU01h
cCogbWFwID0gSlNNYXA6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5tYXBT
dHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShtX2V4
ZWMsIG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAg
ICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQobWFwKTsKICAg
ICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChtYXApOwogICAgICAgICAgICAgbWFw
U3RhY2suYXBwZW5kKG1hcCk7CkBAIC0yNTc0LDcgKzI1NzYsOSBAQCBEZXNlcmlhbGl6YXRpb25S
ZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6CiAgICAgICAgIHNldE9iamVjdFN0YXJ0U3RhdGU6IHsK
ICAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVy
UmVjdXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVl
KCksIFN0YWNrT3ZlcmZsb3dFcnJvcik7Ci0gICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6
OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+dm0o
KSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9y
OwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQoc2V0KTsKICAgICAgICAgICAgIG91dHB1
dE9iamVjdFN0YWNrLmFwcGVuZChzZXQpOwogICAgICAgICAgICAgc2V0U3RhY2suYXBwZW5kKHNl
dCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287782</attachid>
            <date>2016-09-02 11:08:18 -0700</date>
            <delta_ts>2016-09-02 12:48:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>162478</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFBlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMDUpCisrKyBQZXJmb3JtYW5jZVRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTAxICBT
YWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5k
IEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBFUzZTYW1wbGVCZW5jaC9jbGkuanM6CisKIDIwMTYtMDgtMjMgIFNhYW0gQmFyYXRp
ICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcnVu
IEVTNlNhbXBsZUJlbmNoIGZyb20gdGhlIGpzYyBzaGVsbApJbmRleDogUGVyZm9ybWFuY2VUZXN0
cy9FUzZTYW1wbGVCZW5jaC9jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9F
UzZTYW1wbGVCZW5jaC9jbGkuanMJKHJldmlzaW9uIDIwNTMwNSkKKysrIFBlcmZvcm1hbmNlVGVz
dHMvRVM2U2FtcGxlQmVuY2gvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0ICszMCw0IEBA
IGxvYWQoImFpcl9iZW5jaG1hcmsuanMiKTsKIGxvYWQoImJhc2ljX2JlbmNobWFyay5qcyIpOwog
bG9hZCgiZ2x1ZS5qcyIpOwogCi1kcml2ZXIuc3RhcnQoMTApOworZHJpdmVyLnN0YXJ0KDQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAwIEBA
CisyMDE2LTA5LTAxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZhbXBzIGhvdyB3ZSBpbXBsZW1lbnQg
TWFwIGFuZCBTZXQuIEl0IHVzZXMKKyAgICAgICAgYSBuZXcgaGFzaCBtYXAgaW1wbGVtZW50YXRp
b24uIFRoZSBoYXNoIG1hcCB1c2VzIGxpbmVhcgorICAgICAgICBwcm9iaW5nIGFuZCBpdCB1c2Vz
IFdhbmcncyA2NCBiaXQgaGFzaCBmdW5jdGlvbiBmb3IgSlNWYWx1ZXMKKyAgICAgICAgdGhhdCBh
cmVuJ3Qgc3RyaW5ncy4gU3RyaW5ncyB1c2UgU3RyaW5nSW1wbCdzIGhhc2ggZnVuY3Rpb24uCisg
ICAgICAgIFRoZSByZWFzb24gSSB3YW50ZWQgdG8gcm9sbCBvdXIgb3duIEhhc2hUYWJsZSBpcyB0
d29mb2xkOgorICAgICAgICBJIGRpZG4ndCB3YW50IHRvIGlubGluZSBXVEY6Okhhc2hNYXAncyBp
bXBsZW1lbnRhdGlvbiBpbnRvIG91cgorICAgICAgICBKSVQsIHNpbmNlIHRoYXQgc2VlbXMgZXJy
b3IgcHJvbmUgYW5kIHVubWFpbnRhaW5hYmxlLiBBbHNvLCBJIHdhbnRlZAorICAgICAgICBhIGRp
ZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIGhhc2ggbWFwIGJ1Y2tldHMgd2hlcmUgYnVja2V0cyBhbHNv
IGV4aXN0IGluCisgICAgICAgIGEgbGlua2VkIGxpc3QuCisKKyAgICAgICAgVGhlIHJlYXNvbiBm
b3IgbWFraW5nIGJ1Y2tldHMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IGlzIHRoYXQgaXRlcmF0aW9u
CisgICAgICAgIGlzIG5vdyBzaW1wbGUuIEl0ZXJhdGlvbiB3b3JrcyBieSBqdXN0IHRyYXZlcnNp
bmcgYSBsaW5rZWQgbGlzdC4KKyAgICAgICAgVGhpcyBkZXNpZ24gYWxzbyBhbGxvd3MgZm9yIGEg
c2ltcGxlIGltcGxlbWVudGF0aW9uIHdoZW4gZG9pbmcgaXRlcmF0aW9uCisgICAgICAgIHdoaWxl
IHRoZSBoYXNoIHRhYmxlIGlzIG11dGF0aW5nLiBXaGVuZXZlciB3ZSByZW1vdmUgYSBidWNrZXQg
ZnJvbQorICAgICAgICB0aGUgaGFzaCB0YWJsZSwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0
LCBtZWFuaW5nIGl0ZW1zIGluIHRoZQorICAgICAgICBsaXN0IGRvbid0IHBvaW50IHRvIGl0LiBI
b3dldmVyLCB0aGUgcmVtb3ZlZCBidWNrZXQgd2lsbCBzdGlsbCBwb2ludAorICAgICAgICB0byB0
aGluZ3MgdGhhdCBhcmUgZWl0aGVyIGluIHRoZSBsaXN0LCBvciBoYXZlIGFsc28gYmVlbiByZW1v
dmVkLgorICAgICAgICBlLmcsIGZyb20gYSByZW1vdmVkIGJ1Y2tldCwgeW91IGNhbiBhbHdheXMg
Zm9sbG93IHBvaW50ZXJzIHVudGlsIHlvdQorICAgICAgICBlaXRoZXIgZmluZCBhbiBpdGVtIGlu
IHRoZSBsaXN0LCBvciB5b3UgZmluZCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgICAgVGhp
cyBpcyBhIHJlYWxseSBuaWNlIHByb3BlcnR5IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBhIE1hcCBv
ciBTZXQKKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byByZWFzb24gYWJvdXQgdGhlIGFsbCB0aGUg
aXRlcmF0b3JzIHRoYXQgcG9pbnQKKyAgICAgICAgaW50byBpdHMgbGlzdC4gQWxzbywgd2hlbmV2
ZXIgd2UgYWRkIGl0ZW1zIHRvIHRoZSBNYXAgb3IgU2V0LCB3ZQorICAgICAgICBoaWphY2sgdGhl
IHRhaWwgYXMgdGhlIG5ldyBpdGVtLCBhbmQgbWFrZSB0aGUgbmV3IGl0ZW0gcG9pbnQgdG8gYSBu
ZXdseQorICAgICAgICBjcmVhdGVkIHRhaWwuIFRoaXMgbWVhbnMgdGhhdCBhbnkgaXRlcmF0b3Ig
dGhhdCBwb2ludGVkIHRvIHRoZSAidGFpbCIgbm93CisgICAgICAgIHBvaW50cyB0byBub24tdGFp
bCBpdGVtcy4gVGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYWRkaW5nIHRoaW5ncwor
ICAgICAgICB0byB0aGUgTWFwL1NldCB3aGlsZSBpdGVyYXRpbmcgZWFzeS4KKworICAgICAgICBJ
IGFsc28gbWFkZSBNYXAucHJvdG90eXBlLmdldCwgTWFwLnByb3RvdHlwZS5oYXMsIGFuZCBTZXQu
cHJvdG90eXBlLmhhcworICAgICAgICBpbnRvIGludHJpbnNpY3MgaW4gdGhlIERGRy4gVGhlIElS
IGNhbiBub3cgcmVhc29uIGFib3V0IGhhc2ggbWFwCisgICAgICAgIG9wZXJhdGlvbnMgYW5kIGNh
biBldmVuIGRvIENTRSBvdmVyIFdhbmcncyBoYXNoIGZ1bmN0aW9uLCBoYXNoIG1hcAorICAgICAg
ICBidWNrZXQgbG9va3VwcywgaGFzaCBtYXAgYnVja2V0IGxvYWRzLCBhbmQgdGVzdGluZyBpZiBh
IGtleSBpcyBpbgorICAgICAgICB0aGUgaGFzaCB0YWJsZS4gVGhpcyBtYWtlcyBjb2RlIHBhdHRl
cm5zIGZvciBNYXAgbGlrZSBzbywgc3VwZXIgZmFzdAorICAgICAgICBpbiB0aGUgRlRMLCBzaW5j
ZSB3ZSB3aWxsIG9ubHkgYmUgZG9pbmcgYSBzaW5nbGUgaGFzaCBhbmQgaGFzaCBidWNrZXQgbG9v
a3VwOgorCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBnZXRLZXlJZlByZXNlbnQobWFw
LCBrZXkpIHsKKyAgICAgICAgCWlmIChtYXAuaGFzKGtleSkpCisgICAgICAgIAkJcmV0dXJuIG1h
cC5nZXQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKworICAgICAgICBUaGlzIHBhdGNo
IGlzIHJvdWdobHkgYW4gOCUgc3BlZWR1cCBvbiBFUzZTYW1wbGVCZW5jaC4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljQ2FsbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dD
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdFZGdl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpERkc6
OkVkZ2U6Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9E
RkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5k
LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Vz
ZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjppc0NlbGwpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hcEhhc2gpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TWFwQnVja2V0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUxvYWRGcm9tSlNNYXBCdWNr
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSXNOb25F
bXB0eU1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxv
d01hcE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1Nl
dE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd01hcEJ1
Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZU1hcE9iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZVNldE9i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNldE1hcEJ1Y2tl
dCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1JlZ0V4cE9iamVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1N0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpz
cGVjdWxhdGVSZWdFeHBPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpzZXRTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0
SGFzaCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBwYXJzZXIvTW9kdWxl
QW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVBbmFseXplcjo6TW9kdWxlQW5hbHl6
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6Okhhc2hNYXBC
dWNrZXQ6OnNlbGVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6Okhhc2hNYXBCdWNrZXQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwQnVja2V0OjpzZXROZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6
c2V0UHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldEtleSk6CisgICAgICAg
IChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldFZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1
Y2tldDo6a2V5KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6dmFsdWUpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVja2V0OjpuZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tl
dDo6cHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmRlbGV0ZWQpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVja2V0OjpzZXREZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEJ1Y2tldDo6b2Zmc2V0T2ZLZXkpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpvZmZz
ZXRPZlZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpidWZmZXIpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjphcmVLZXlzRXF1YWwpOgorICAg
ICAgICAoSlNDOjpub3JtYWxpemVNYXBLZXkpOgorICAgICAgICAoSlNDOjpqc01hcEhhc2gpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6c2VsZWN0U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJ
bXBsOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6SGFzaE1hcEltcGwpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmVtcHR5
VmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Okhhc2hNYXBJbXBsOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1w
bDo6aXNEZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXQpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcElt
cGw6Omhhcyk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjphZGQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnNpemUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpIYXNo
TWFwSW1wbDo6YnVmZmVyU2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6
b2Zmc2V0T2ZCdWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6b2Zmc2V0T2ZDYXBh
Y2l0eSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpoZWFkKToKKyAgICAgICAgKEpTQzo6
SGFzaE1hcEltcGw6OnRhaWwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YXBwcm94aW1h
dGVTaXplKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXRBbHJlYWR5SGFz
aGVkQW5kTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpyZWhhc2gpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6bWFrZUFuZFNldE5ld0J1ZmZlcik6CisgICAgICAg
ICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnNh
bWVWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU01hcDo6ZXN0aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjp2
aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OmNvcHlCYWNraW5n
U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6aGFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXA6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpy
ZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKEpT
Qzo6SlNNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU01hcDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6
CisgICAgICAgIChKU0M6OkpTTWFwOjpKU01hcCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRy
eTo6a2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5Ojp2YWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmNsb25lKToKKyAgICAgICAgKiBydW50aW1l
L0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6YWR2YW5jZUl0
ZXIpOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKEpTQzo6
SlNNYXBJdGVyYXRvcjo6bmV4dEtleVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRv
cjo6SlNNYXBJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OnNldEl0ZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6aXRlcmF0b3JEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVM
b2FkZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVy
Lmg6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9K
U1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OmVzdGltYXRlZFNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1NldDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0Ojpjb3B5
QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6Omhhcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZXQ6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpjbGVhcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNTZXQuaDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTU2V0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1NldDo6YWRkKToK
KyAgICAgICAgKEpTQzo6SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5
OjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6Y2xvbmUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjphZHZhbmNlSXRl
cik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoSlNDOjpK
U1NldEl0ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRv
cjo6c2V0SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpmaW5pc2gpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjppdGVyYXRvckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9NYXBC
YXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTxIYXNoTWFwQnVja2V0VHlw
ZT46OmVzdGltYXRlZFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQmFzZS5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6TWFwQmFzZTo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6Omhh
cyk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6TWFwQmFz
ZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluZEJ1Y2tldCk6CisgICAgICAg
IChKU0M6Ok1hcEJhc2U6Om9mZnNldE9mSGFzaE1hcEltcGwpOgorICAgICAgICAoSlNDOjpNYXBC
YXNlOjppbXBsKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpNYXBCYXNlOjpNYXBCYXNlKToKKyAgICAgICAgKiBydW50aW1lL01hcENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAgICAgICAgKiBydW50
aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQ
cm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6Z2V0TWFwKToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJc01hcCk6CisgICAgICAgIChK
U0M6OnByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OnNhbWVWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L1NldENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U2V0
SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6Z2V0U2V0KToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNTZXRJdGVyYXRv
ck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0p
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNi0wOS0wMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6
Omluc2VydE9TUkhpbnRzRm9yVXBkYXRlKCkgZmFpbHMgdG8gZW1pdCB1cGRhdGVkIGhpbnRzIGlu
IHNvbWUgY2FzZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50aW1l
L0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKKyAg
ICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKICAg
ICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVkVHlwZS5jcHAK
QEAgLTc1Miw2ICs3NTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRp
bWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAK
ICAgICBydW50aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJhc2UuY3BwCiAgICAgcnVu
dGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBl
LmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAwLDEwICsxMzAwLDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRN
YXRoSUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMg
LyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2lu
TWFwLmNwcCAqLzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3Jp
Z2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVCMTk5NzFENzhCRTM1
MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi87
IH07CisJCTc5NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhCRTM1MDAyNjJG
QTAgLyogTWFwQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYw
MDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVE
OTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLzsgfTsKKwkJ
NzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIg
LyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODMzMUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEyMjgzNjFEMzVE
NzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxp
bmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUzMywxMCAr
MzUzNywxNCBAQAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVP
cmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0ODFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyog
SGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFz
aE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RTFENzY4
NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBMjI4
MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElD
Rm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9y
d2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NzQsNiArNTc4Miw4IEBA
CiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLywKIAkJCQlC
QzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMz
N0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJNzlBMDkwN0Qx
RDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJCQk3OUEwOTA3RTFENzY4
NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4
NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNF
IC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRl
bnRpZmllcklubGluZXMuaCAqLywKQEAgLTU5ODIsNiArNTk5Miw4IEBACiAJCQkJQTdFMkVBNjkw
RkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJCQlGNjkyQTg2ODAyNTU1
OTdEMDFGRjYwRjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1OTdEMDFGRjYw
RjcgLyogTG9va3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJh
c2UuY3BwICovLAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8s
CiAJCQkJQTcwMDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCAqLywK
IAkJCQlBNzAwODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCAqLywKIAkJ
CQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLApAQCAtNzI3MSw2ICs3
MjgzLDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVT
aHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgxRDc4QkUzNTAwMjYyRkEw
IC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3MUI4NEZCNEEwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQjExNEJD
RjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMy
OUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAg
LTc0MzcsNiArNzQ1MCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0Zs
dXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBC
QkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5QTA5MDgwMUQ3
Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUND
ODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzEsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVG
OTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2
NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBB
MUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZBQTAwQ0Y2NTY0
IC8qIEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNC
Njg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIwMSw2
ICs5MjE2LDcgQEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJGRjJCMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
QzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUg
IlNwZWN1bGF0ZWRUeXBlLmgiCiAKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNp
bmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IlN0cmluZ09iamVjdC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtMzQ2LDYgKzM0
OCwxMiBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBp
ZiAoY2xhc3NJbmZvID09IFJlZ0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3Bl
Y1JlZ0V4cE9iamVjdDsKKworICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAg
ICAgICAgcmV0dXJuIFNwZWNNYXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0
OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChj
bGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1
cm4gU3BlY0Z1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0
MSArMzksNDMgQEAgY2xhc3MgU3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0
ZWRUeXBlOwogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAg
ICAgPSAwOyAvLyBXZSBkb24ndCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
QXJyYXkgICAgICAgICAgICAgID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJh
eS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0g
MXUgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIEludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUg
PDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJj
bGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAg
ICAgPSAxdSA8PCA2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2Yg
aXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xh
bXBlZEFycmF5ICA9IDF1IDw8IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBVaW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAx
dSA8PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3Qg
ICAgICAgID0gMXVsbCA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxs
IDw8IDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bmN0aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgSlNGdW5jdGlvbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50
OEFycmF5ICAgICAgICAgID0gMXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFy
cmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjSW50MTZBcnJheSAgICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gSW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0ludDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nl
cy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0g
MXVsbCA8PCA3OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25l
IG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50
MTZBcnJheSAgICAgICAgPSAxdWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIFVpbnQzMkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8
PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3Vi
Y2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcg
ICAgID0gU3BlY0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBT
cGVjVWludDhBcnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8
IFNwZWNVaW50MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owot
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8
PCAxMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBSZWdFeHBPYmplY3QgKGFuZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8
IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwg
SlNBcnJheSwgb3IgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
T2JqZWN0ICAgICAgICAgICAgID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1
bmN0aW9uIHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNT
Y29wZWRBcmd1bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNw
ZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBv
ZiBvYmplY3QgcHJlZGljdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3Ry
aW5nSWRlbnQgICAgICAgID0gMXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5n
LCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNTdHJpbmdWYXIgICAgICAgICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNT
dHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNTY29wZWRBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNTdHJpbmdPYmplY3QgICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBTdHJpbmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9i
amVjdCAgICAgICA9IDF1bGwgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVj
dCAoYW5kIG5vdCBhbnkgc3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjTWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQn
cyBkZWZpbml0ZWx5IE1hcCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwg
PDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNs
YXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVy
ICAgICAgICA9IDF1bGwgPDwgMTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5v
dCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBT
cGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0
QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVj
UmVnRXhwT2JqZWN0IHwgU3BlY01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0
T3RoZXI7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0
IHByZWRpY3Rpb24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50
ICAgICAgICA9IDF1bGwgPDwgMTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQg
aXQncyBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdWYXIgICAgICAgICAgPSAxdWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmlu
ZywgYW5kIGl0J3Mgbm90IGFuIGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1N0cmluZyAgICAgICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdW
YXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNTeW1ib2wgICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgU3ltYm9sLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIg
ICAgICAgICAgPSAxdSA8PCAyMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3Qg
YSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBh
IFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0
ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1
bGwgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVm
aW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0
IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0NlbGwgICAgICAgICAgICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCB8IFNwZWNDZWxsT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxs
IDw8IDIzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwg
PDwgMjQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4g
MCBvciAxLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAg
ICAgPSBTcGVjQm9vbEludDMyIHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIEludDMyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAg
ICAgICAgPSAxdSA8PCAyMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRl
bmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8
PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5i
b3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNw
ZWNJbnQ1Mk9ubHk7IC8vIEl0J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50
IGFyaXRobWV0aWMgb24uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFz
RG91YmxlICAgICA9IDF1IDw8IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0
J3MgaW5zaWRlIGEgZG91YmxlLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25J
bnRBc0RvdWJsZSAgICAgPSAxdSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1
MiBidXQgaXQncyBhIHJlYWwgbnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3
OyAvLyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIg
YW5kIGl0J3MgYSBkb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJs
ZVJlYWwgICAgICAgICA9IFNwZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgTmFOIHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxs
IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUu
IHB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4g
ICAgPSAxdWxsIDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUg
dG8gdGFnIChpLmUuIGltcHVyZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Rv
dWJsZU5hTiAgICAgICAgICA9IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5h
TjsgLy8gSXQncyBkZWZpbml0ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3Bl
Y0RvdWJsZVB1cmVOYU47IC8vIEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUs
IGJ1dCBpdCdzIGRlZmluaXRlbHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bGxEb3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0Rv
dWJsZU5hTjsgLy8gSXQncyBlaXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgx
LDEyICs4MywxMiBAQCBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNB
bnlJbnQgfCBTcGVjRG91YmxlUmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3Vi
bGVSZWFsLCBvciBhIEludDUyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRl
Y29kZU51bWJlciAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJ
dCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJl
IGFuIGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1i
ZXIgICAgICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIg
YW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVy
ZSBOYU4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAg
ICA9IDF1IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQn
cyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3Ro
ZXIgICAgICAgICAgICAgID0gMXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBO
dWxsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAg
ICAgICAgICAgICAgID0gU3BlY0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVs
eSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNl
cHQgZm9yIFNwZWNJbnQ1Mk9ubHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5v
bi1PYmplY3QgSlNWYWx1ZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkg
ICAgICAgICAgICAgID0gMXUgPDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1
ZSBtYXJrZXIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAg
ICAgICA9IDF1bGwgPDwgMzI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJr
ZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9
IFNwZWNIZWFwVG9wIHwgU3BlY0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwg
ZXhjZXB0IGZvciBTcGVjSW50NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNw
b25kcyB0byB3aGF0IGNvdWxkIGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29k
ZVRvcCB8IFNwZWNGdWxsTnVtYmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29k
ZSBjb3VsZCBzZWUgcGx1cyBleG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTc3LDYgKzk3NywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwogICAgIGNhc2Ug
SXNFbXB0eToKICAgICBjYXNlIElzSlNBcnJheToKICAgICBjYXNlIElzVW5kZWZpbmVkOgpAQCAt
Mjg4Myw3ICsyODk5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVuc2ln
bmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5h
dChpbmRleEluQmxvY2spOwotICAgIAorCiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVj
dXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywg
bm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwz
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldElu
dHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAg
ICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lz
dGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9H
cmFwaChNYXBIYXNoLCBrZXkpOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdl
dE1hcEJ1Y2tldCwgRWRnZShtYXAsIE1hcE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNo
KSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tl
dCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgY2FzZSBKU1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFw
SGFzSW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGluc2VydENoZWNrcygp
OworICAgICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFz
aCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0g
aW50cmluc2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0
VXNlOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJ
bmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsK
KyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBi
dWNrZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYgKzEyNDMsMjcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9n
U2hhZG93Q2hpY2tlblRhaWw6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFk
KE1pc2NGaWVsZHMpOworICAgICAgICBFZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7Cisg
ICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBub2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihNYXBCdWNrZXRMb2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGtleUVkZ2UpLCBMYXp5
Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIGJ1
Y2tldEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01h
cEdldExvYywgTWlzY0ZpZWxkcywgYnVja2V0RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAg
IHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTWFwSGFzTG9jLCBN
aXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSwxMCBAQCBib29sIGRv
ZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAg
ICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6
CisgICAgY2FzZSBNYXBIYXNoOgorICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBJbkxvb3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vk
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBBZGphY2VuY3lMaXN0OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RhdGlj
IHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNzsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3Qgc2hpZnQoKSB7IHJldHVybiA4OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBt
YWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3Rh
dHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewpAQCAtMTk3LDggKzE5NywyMSBAQCBw
cml2YXRlOgogICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUg
Pj4gc2hpZnQoKSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBB
U1NFUlQodXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFT
U0VSVCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRl
ZFZhbHVlIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpk
b2VzS2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjpp
c1Byb3ZlZChwcm9vZlN0YXR1cykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAyKSA8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDEpIDw8IHNoaWZ0KCkpLCAiV2UgcmVseSBvbiB0aGlzIGJlaW5nIHRydWUgdG8gbm90IGNsb2Ji
ZXIgdGhlIG5vZGUgcG9pbnRlci4iKTsKKyAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHNoaWZ0
ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6
ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6
aXNQcm92ZWQocHJvb2ZTdGF0dXMpKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIHVuaW9uIFUgeworICAgICAgICAgICAgICAgIFUoKSB7IHdvcmQgPSAwOyB9
CisgICAgICAgICAgICAgICAgdWludHB0cl90IHdvcmQ7CisgICAgICAgICAgICAgICAgRWRnZSBl
ZGdlOworICAgICAgICAgICAgfSB1OworICAgICAgICAgICAgdS53b3JkID0gcmVzdWx0OworICAg
ICAgICAgICAgQVNTRVJUKHUuZWRnZS51c2VLaW5kVW5jaGVja2VkKCkgPT0gdXNlS2luZCk7Cisg
ICAgICAgICAgICBBU1NFUlQodS5lZGdlLm5vZGUoKSA9PSBub2RlKTsKKyAgICAgICAgICAgIEFT
U0VSVCh1LmVkZ2UucHJvb2ZTdGF0dXNVbmNoZWNrZWQoKSA9PSBwcm9vZlN0YXR1cyk7CisgICAg
ICAgICAgICBBU1NFUlQodS5lZGdlLmtpbGxTdGF0dXNVbmNoZWNrZWQoKSA9PSBraWxsU3RhdHVz
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICNlbHNl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDUsNiArMTU0NSwyOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8TWFwT2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2Jq
ZWN0VXNlKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8U2V0T2JqZWN0VXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0Ogor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIE1hcEhhc2g6CisgICAgICAgICAgICBmaXhFZGdlPFVu
dHlwZWRVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8g
ZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rl
cy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQzLDYgKzE0MywxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
TG9jCiAgICAgY2FzZSBSZWdFeHBPYmplY3RMYXN0SW5kZXhMb2M6CiAgICAgICAgIG91dC5wcmlu
dCgiUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1hcEJ1Y2tldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNYXBCdWNrZXRMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNN
YXBHZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwSGFzTG9jOgorICAgICAg
ICBvdXQucHJpbnQoIk1hcEhhc0xvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAg
ICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2MsCi0gICAgU3RhY2tQYXls
b2FkTG9jCisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAgIE1hcEJ1Y2tldExvYywKKyAgICBKU01h
cEdldExvYywKKyAgICBNYXBIYXNMb2MKIH07CiAKIGNsYXNzIEhlYXBMb2NhdGlvbiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MTks
NiArMTQxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgICAg
ICBjYXNlIFN0cmluZ1JlcGxhY2VSZWdFeHA6CiAgICAgICAgIGNhc2UgVG9OdW1iZXI6CisgICAg
ICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODgsNyArMzg4LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oVG9JbmRleFN0
cmluZywgTm9kZVJlc3VsdEpTKQorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRK
UykgXAorICAgIC8qIEhhc2hpbmcgbm9kZXMgZm9yIEpTTWFwIGFuZCBKU1NldCAqLyBcCisgICAg
bWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oR2V0TWFwQnVja2V0
LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhJc05vbkVtcHR5TWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVh
bikgXAogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5n
IGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50
IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2sp
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01h
cC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0x
ODAzLDYgKzE4MDUsMzQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNW
YQogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpLCBzbG90KTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKworICAgIHJldHVybiBqc01hcEhhc2goZXhlYywgdm0sIG5vcm1hbGl6
ZU1hcEtleShKU1ZhbHVlOjpkZWNvZGUoaW5wdXQpKSk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1h
cCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5k
QnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1Y2tl
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNT
ZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsK
KyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpi
dWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGlt
aXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpCiB7CiAg
ICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBo
ZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiAr
MTQyLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmlu
Z0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3Rl
clN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90KTsKKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09i
amVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzExLDYgKzcxMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBMb2FkRnJv
bUpTTWFwQnVja2V0OgogICAgICAgICBjYXNlIFRvTnVtYmVyOiB7CiAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC03NDEsNiArNzQyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJl
YWs7CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA1MzA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEZ1bmN0aW9u
VXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFJlZ0V4cE9i
amVjdFVzZToKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU2V0T2Jq
ZWN0VXNlOgogICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgU3Ry
aW5nSWRlbnRVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMzU1LDYgKzM1NywxMCBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRE
eW5hbWljVmFyOgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAgICBjYXNlIFJlc29sdmVTY29w
ZToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBM
b2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIK
ICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgogI2lu
Y2x1ZGUgIkpTRW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgpAQCAtNDcyMCw2
ICs0NzIxLDgyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBNYXBIYXNoOiB7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBKU1ZhbHVl
UmVncyBpbnB1dFJlZ3MgPSBpbnB1dC5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgaW5wdXRSZWdzKTsKKyAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6IHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVn
IG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mga2V5UmVncyA9IGtleS5q
c1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxh
dGVNYXBPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVj
dWxhdGVTZXRPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBP
YmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1
Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCwgcmVz
dWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisK
KyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworCisg
ICAgICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJ
c05vbkVtcHR5TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tl
dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJl
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCks
IHJlc3VsdEdQUik7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgi
CiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJh
bWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKQEAgLTQ2MTUsNiArNDYxNywx
NjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKKyAgICBjYXNlIE1hcEhhc2g6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFu
Y2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5n
VHlwZSkpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhp
bnB1dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByZXN1bHRHUFIpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIG1faml0LnVyc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDYpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9q
aXQuanVtcCgpKTsKKworICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICBz
dHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSk7Cisg
ICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVn
cyhpbnB1dEdQUikpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisK
KyAgICAgICAgc3RyYWlnaHRIYXNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuV2FuZ3NJbnQ2NEhhc2gocmVzdWx0
R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAg
ICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwg
cmVzdWx0R1BSLCBpbnB1dEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IG1hc2sodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IGJ1ZmZlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1
Y2tldCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAg
ICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBt
YXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXNrR1BSID0gbWFzay5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWZmZXJHUFIg
PSBidWZmZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBrZXlHUFIgPSBrZXkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9k
ZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qo
bm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtYXBHUFIsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBP
YmplY3RVc2UgPyBKU01hcDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpIDogSlNTZXQ6Om9mZnNldE9m
SGFzaE1hcEltcGwoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZDYXBhY2l0eSgpKSwgbWFza0dQUik7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVm
ZmVyKCkpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IG1hc2tHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGhhc2hHUFIsIGluZGV4R1BSKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGxvb3BBcm91bmQ7CisKKyAgICAgICAgbV9qaXQuYW5kMzIobWFza0dQUiwgaW5kZXhHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyR1BS
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBidWNrZXRHUFIpOworICAg
ICAgICBtX2ppdC5tb3ZlKGJ1Y2tldEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBub3RQ
cmVzZW50SW5UYWJsZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSk7CisgICAgICAgIGxv
b3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkpLCBidWNrZXRHUFIp
OworCisgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRHUFIsIGtleUdQUikp
OyAvLyBUaGV5J3JlIGRlZmluaXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdlIGZvdW5kIHRoZSBidWNr
ZXQgd2Ugd2VyZSBsb29raW5nIGZvciEKKyAgICAgICAgYXV0byBvbmVJc250Q2VsbCA9IG1faml0
LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKTsKKyAgICAgICAgLy8gZmly
c3QgaXMgYSBjZWxsIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5j
aElmTm90Q2VsbChKU1ZhbHVlUmVncyhrZXlHUFIpKSk7CisgICAgICAgIC8vIEJvdGggYXJlIGNl
bGxzIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYnVja2V0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5
cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZyBoZXJlLgorICAgICAgICBz
bG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGtleUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAvLyBUaGUg
Zmlyc3QgaXMgYSBzdHJpbmcsIGJ1dCB0aGUgc2Vjb25kIGlzIG5vdCwgd2UgY29udGludWUgdG8g
bG9vcCBhcm91bmQuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisK
KyAgICAgICAgb25lSXNudENlbGwubGluaygmbV9qaXQpOworICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IGRvbmUgYSA2NC1iaXQgY29tcGFyZSBhdCB0aGlzIHBvaW50LCBzbyBpZiBvbmUgaXMgbm90
IGEgbnVtYmVyLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVxdWFsLgorICAgICAgICBsb29wQXJv
dW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihidWNrZXRHUFIpKTsKKyAgICAgICAg
bG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoa2V5R1BSKSk7CisgICAg
ICAgIC8vIEJvdGggYXJlIGRlZmluaXRlbHkgbnVtYmVycy4gSWYgd2Ugc2VlIGEgZG91YmxlLCB3
ZSBnbyB0byB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdEludDMyKGJ1Y2tldEdQUikpOworICAgICAgICBzbG93UGF0aENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGtleUdQUikpOworICAgICAgICAKKyAgICAgICAg
bG9vcEFyb3VuZC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNT
ZXRGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAg
ICAgbm90UHJlc2VudEluVGFibGUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBi
dWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBi
dWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1Y2tl
dEdQUiwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzgxLDYgKzczODEsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlUmVnRXhwT2Jq
ZQogICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKIH0KIAor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSwgR1BSUmVn
IGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3BlY01hcE9iamVj
dCwgSlNNYXBUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2Jq
ZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNYXBP
YmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVy
YW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBvcGVyYW5kLmdw
cigpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2Ug
ZWRnZSwgR1BSUmVnIGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwg
U3BlY1NldE9iamVjdCwgSlNTZXRUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVk
Z2UsIFNwZWNTZXRPYmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdl
LCBvcGVyYW5kLmdwcigpKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcihFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBT
cGVjT2JqZWN0IHwgU3BlY090aGVyKSkKQEAgLTc2NjgsNiArNzY5NiwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6
CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0
ZVNldE9iamVjdChlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RPck90aGVy
VXNlOgogICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOwogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5MSw2ICsxMjkxLDEyIEBAIHB1Ymxp
YzoKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKENfSklUT3BlcmF0aW9uX0VDSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMg
b3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVS
ZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIuZ3ByKCksIG1hdGhJQyk7
CkBAIC0xNjcxLDYgKzE2NzcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVy
YXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25l
ZCBhcmcyLCB1bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFy
ZzMpKTsKQEAgLTE3MTksNiArMTczMSwxOCBAQCBwdWJsaWM6CiAgICAgfQogI2Vsc2UgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19K
SVRPcGVyYXRpb25fRUNKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBK
U1ZhbHVlUmVncyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdH
UFIoKSwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3Mg
YXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwg
SlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJn
MS5wYXlsb2FkR1BSKCksIGFyZzEudGFnR1BSKCksIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRh
Z0dQUigpLCBtYXRoSUMpOwpAQCAtMjY1Niw2ICsyNjgwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2Jq
ZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChF
ZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNwZWN1
bGF0ZU1hcE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRP
YmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSwgR1BSUmVnIGNl
bGwpOwogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNw
ZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2UoRWRnZSBlZGdlLCBHUFJSZWcgc3RyaW5nLCBHUFJS
ZWcgc3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNl
S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDEyIEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAg
ICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk1hcE9iamVjdFVzZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIG91dC5wcmludCgi
U2V0T2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJV
c2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDggQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93blN0cmluZ1Vz
ZSwKICAgICBLbm93blByaW1pdGl2ZVVzZSwgLy8gVGhpcyBiaXphcnJlIHR5cGUgYXJpc2VzIGZv
ciBvcF9zdHJjYXQsIHdoaWNoIGhhcyBhIGJ5dGVjb2RlIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwg
b25seSBzZWUgcHJpbWl0aXZlcyAoaS5lLiBub3Qgb2JqZWN0cykuCiAgICAgU3ltYm9sVXNlLAor
ICAgIE1hcE9iamVjdFVzZSwKKyAgICBTZXRPYmplY3RVc2UsCiAgICAgU3RyaW5nT2JqZWN0VXNl
LAogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5vdFN0cmluZ1ZhclVzZSwKQEAg
LTEzNCw2ICsxMzYsMTAgQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNl
SwogICAgICAgICByZXR1cm4gU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdDsKICAgICBjYXNlIFN5
bWJvbFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNTeW1ib2w7CisgICAgY2FzZSBNYXBPYmplY3RV
c2U6CisgICAgICAgIHJldHVybiBTcGVjTWFwT2JqZWN0OworICAgIGNhc2UgU2V0T2JqZWN0VXNl
OgorICAgICAgICByZXR1cm4gU3BlY1NldE9iamVjdDsKICAgICBjYXNlIFN0cmluZ09iamVjdFVz
ZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZToKQEAgLTIyMSw2ICsyMjcsOCBAQCBpbmxpbmUgYm9vbCBpc0NlbGwoVXNl
S2luZCBraW5kKQogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNl
OgogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgY2FzZSBNYXBPYmplY3RV
c2U6CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRGR0Fy
cmF5TW9kZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkluZGV4
aW5nVHlwZS5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC0xMDIsNyArMTA0LDEzIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZv
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2ds
b2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwKLSAg
ICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZz
ZXQoKSkKKyAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTTWFwX2hhc2hNYXBJbXBsLCBKU01hcDo6b2Zm
c2V0T2ZIYXNoTWFwSW1wbCgpKSBcCisgICAgbWFjcm8oSlNTZXRfaGFzaE1hcEltcGwsIEpTU2V0
OjpvZmZzZXRPZkhhc2hNYXBJbXBsKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9jYXBhY2l0
eSwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZz
ZXRPZkNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9idWZmZXIsICBIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVmZmVy
KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpIFwKKyAgICBtYWNybyhIYXNo
TWFwQnVja2V0X2tleSwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6
b2Zmc2V0T2ZLZXkoKSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVB
UChtYWNybykgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAg
ICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIE1hcEhh
c2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0
OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAg
Y2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTQzNyw2ICs0NDEsOCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAg
ICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAg
ICAgICAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIFNldE9iamVj
dFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTm90Q2VsbFVz
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1
ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDE4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAg
IGNvbXBpbGVNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRN
YXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0TWFwQnVja2V0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAg
Y29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlSXNOb25FbXB0
eU1hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6
CiAgICAgICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NjM1MSw2ICs2MzY0LDIyOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBo
aShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZvaWQg
Y29tcGlsZU1hcEhhc2goKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRIYXNoID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm9uRW1wdHlTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsKSk7
CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxD
YXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVh
bChtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBl
KSwgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0cmFp
Z2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbm9uRW1w
dHlTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIoMCkp
LCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5U3RyaW5nQ2FzZSkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5vbkVtcHR5U3RyaW5nQ2FzZSwgbm90Q2VsbCk7CisgICAgICAg
IExWYWx1ZSBoYXNoID0gbV9vdXQubFNocihtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFw
cy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksIG1fb3V0LmNvbnN0SW50MzIoNikpOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQgPSBtX291dC5hbmNob3Io
aGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoLCBtX291dC5jb25z
dEludDMyKDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29udGlu
dWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwgaXNOdW1iZXJDYXNl
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUpLCB1
bnN1cmUoaXNOdW1iZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShzdHJhaWdodEhhc2gp
LCB1bnN1cmUoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJhaWdodEhh
c2gsIHNsb3dDYXNlKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAg
TFZhbHVlIGtleSA9IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtleTsKKyAgICAgICAg
dGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7CisgICAgICAgIHRl
bXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRl
bXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAgIHRlbXAgPSBrZXk7
CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjIpKTsK
KyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSAr
PSB+KGtleSA8PCAxMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291
dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0ZW1wID0gbV9vdXQu
Yml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAg
ICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRl
bXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOworICAgICAgICBrZXkg
PSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7
CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9v
dXQuY29uc3RJbnQzMigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOwor
ICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAg
ICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTUpKTsKKyAgICAg
ICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtl
eSA8PCAyNyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwo
dGVtcCwgbV9vdXQuY29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90
KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8g
a2V5IF49IChrZXkgPj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0g
bV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAgICAgIGtleSA9IG1f
b3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5jYXN0VG9JbnQzMihr
ZXkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
a2V5KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsKEludDMyLCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShJ
bnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3RQcmVzZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdEVtcHR5VmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3REZWxldGVkVmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGJ1Y2tldEtleU5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBib3RoQXJlQ2VsbHMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBi
dWNrZXRLZXlJc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGJ1Y2tldEtleUlzTnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgYm90aEFyZU51bWJlcnMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBidWNrZXRLZXlJc0ludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgbWFw
OworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
KQorICAgICAgICAgICAgbWFwID0gbG93TWFwT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBlbHNlIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2Up
CisgICAgICAgICAgICBtYXAgPSBsb3dTZXRPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgTFZhbHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
IExWYWx1ZSBoYXNoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgTFZh
bHVlIGhhc2hNYXBJbXBsID0gbV9vdXQubG9hZFB0cihtYXAsIG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSA/IG1faGVhcHMuSlNNYXBfaGFzaE1hcEltcGwgOiBtX2hl
YXBzLkpTU2V0X2hhc2hNYXBJbXBsKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0Lmxv
YWRQdHIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfYnVmZmVyKTsKKyAgICAgICAg
TFZhbHVlIG1hc2sgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKGhhc2hNYXBJbXBsLCBtX2hlYXBz
Lkhhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaGFzaCk7CisgICAgICAgIG1fb3V0
Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB1bm1h
c2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOworICAgICAgICBMVmFs
dWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50
NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSksCisgICAgICAg
ICAgICB1bnN1cmUobm90UHJlc2VudEluVGFibGUpLCB1bnN1cmUobm90RW1wdHlWYWx1ZSkpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5vdERlbGV0ZWRWYWx1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291dC5j
b25zdEludFB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
Pj46OmRlbGV0ZWRWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVu
c3VyZShub3REZWxldGVkVmFsdWUpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3REZWxl
dGVkVmFsdWUsIG5vdEJpdEVxdWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1Y2tldEtleSA9IG1fb3V0
LmxvYWQ2NChoYXNoTWFwQnVja2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNrZXRfa2V5KTsKKyAgICAg
ICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1
YWwoa2V5LCBidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShub3RCaXRFcXVhbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVxdWFs
LCBidWNrZXRLZXlJc0NlbGwpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtl
eSksCisgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwgdW5zdXJlKGJ1Y2tldEtl
eU5vdENlbGwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGwsIGJv
dGhBcmVDZWxscyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoa2V5KSwKKyAgICAgICAg
ICAgIHVuc3VyZShib3RoQXJlQ2VsbHMpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOworICAgICAg
ICBtX291dC5icmFuY2goaXNTdHJpbmcoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShi
dWNrZXRLZXlJc1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENlbGwpOworICAgICAgICBt
X291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
Tm90Q2VsbCwgYnVja2V0S2V5SXNOdW1iZXIpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RO
dW1iZXIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJl
KGJ1Y2tldEtleUlzTnVtYmVyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
SXNOdW1iZXIsIGJvdGhBcmVOdW1iZXJzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TnVt
YmVyKGtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShib3RoQXJl
TnVtYmVycykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVOdW1iZXJzLCBidWNr
ZXRLZXlJc0ludDMyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYnVja2V0S2V5
KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShidWNrZXRLZXlJc0ludDMy
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJbnQzMiwgbG9vcEFyb3Vu
ZCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGtleSksCisgICAgICAgICAgICB1
bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGxvb3BBcm91bmQsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaSh1bm1hc2tlZEluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291dC5p
bnQzMk9uZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE1hcE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlv
bkpTU2V0RmluZEJ1Y2tldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSwgaGFzaCkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
UHJlc2VudEluVGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
dFByZXNlbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5waGko
cG9pbnRlclR5cGUoKSwgYnVja2V0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJl
c3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygp
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQ
dHIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNr
ZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhh
c0J1Y2tldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1h
cEJ1Y2tldF92YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCgpCisgICAgewor
ICAgICAgICBMVmFsdWUgYnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0LCBtX291dC5jb25z
dEludFB0cigwKSk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKKyAgICB9CisKICAgICB2
b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwpAQCAtOTkyOCw2ICsxMDE2MywyMCBAQCBwcml2YXRlOgogICAgICAgICBzcGVj
dWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CisKKyAgICBMVmFsdWUgbG93TWFwT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVNYXBP
YmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBMVmFsdWUgbG93U2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVl
IGxvd1N0cmluZyhFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9t
YXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICB7CkBAIC0xMDA1MSw2ICsxMDMwMCwxNyBAQCBw
cml2YXRlOgogICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExWYWx1ZSBsb3dNYXBCdWNrZXQoRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fbWFwQnVja2V0
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1
ZSBzdHJpY3RJbnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpAQCAt
MTAzNTQsNiArMTA2MTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RV
c2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxh
dGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRP
YmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6CiAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjgyLDYgKzEwOTQ4LDI4
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwg
bG93Q2VsbChlZGdlKSk7CiAgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRn
ZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAg
ICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjTWFwT2JqZWN0LCBpc05vdFR5
cGUoY2VsbCwgSlNNYXBUeXBlKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmpl
Y3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIGxv
d0NlbGwoZWRnZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2Ug
ZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1NldE9iamVjdCwgaXNOb3RUeXBl
KGNlbGwsIEpTU2V0VHlwZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0
KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBl
ZGdlLCBMVmFsdWUgY2VsbCkKICAgICB7CkBAIC0xMTQ1MCw2ICsxMTczOCwxMCBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZh
bHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChO
b2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21hcEJ1Y2tldFZhbHVl
cy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9
CiAgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1f
aGlnaEJsb2NrKSk7CkBAIC0xMTQ4Myw2ICsxMTc3NSwxMCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBC
dWNrZXQoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fbm9kZSwg
dmFsdWUpOworICAgIH0KICAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCiAgICAgewog
ICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CkBAIC0xMTY2Niw2ICsxMTk2Miw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVl
VmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZh
bHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1
ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9tYXBCdWNrZXRWYWx1
ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7
CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIEIzIGZy
b20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIw
NTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1MiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0pOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1
bHQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0
OworICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7
CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2Ny
YXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+
IDIyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDIyKSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtl
eSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDEzKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAg
YWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1v
dmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAz
KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MyksIHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0g
KGtleSA+PiAxNSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxNSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAg
ICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gp
OworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7
CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigz
MSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2
NChUcnVzdGVkSW1tUHRyKG1hc2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9CisjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9u
ZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9
CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsg
fQpAQCAtMTQ4OSw2ICsxNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3Q8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1
c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJl
c3MocmVzdWx0R1BSLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsK
ICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHZvaWQgV2FuZ3NJbnQ2NEhhc2goR1BS
UmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5kaWYKICAgICAKIHByb3Rl
Y3RlZDoKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBAIHR5
cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxsKiAo
SklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0WlopKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCog
KEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAq
Q19KSVRPcGVyYXRpb25fRUNKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9u
X0QpKGRvdWJsZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRp
b25fRykoSlNHbG9iYWxPYmplY3QqKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpE
X0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBNb2R1bGVBbmFs
eXplcjo6TW9kdWxlQW5hbHl6ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBt
b2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBs
ZXhpY2FsVmFyaWFibGVzKQogICAgIDogbV92bSgmZXhlYy0+dm0oKSkKLSAgICAsIG1fbW9kdWxl
UmVjb3JkKGV4ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxl
S2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykpCisg
ICAgLCBtX21vZHVsZVJlY29yZChleGVjLT52bSgpLCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9kdWxlUmVjb3Jk
U3RydWN0dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxl
eGljYWxWYXJpYWJsZXMpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisKKyNpbmNsdWRlICJD
b3BpZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPD4KK2NvbnN0IEpTX0VYUE9SVERBVEEgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRy
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXk+KSB9OworCit0ZW1wbGF0ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQorICAgIHsgIkhh
c2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBE
YXRhPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVj
dCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9u
ZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2KTsKKworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
PT0gMCwgIldlIGFzc3VtZSB0aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4gbWVtYmVycyBvbmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdp
c2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6
ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOworfQorCit0ZW1wbGF0
ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwi
LCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PikgfTsKKwordGVtcGxhdGU8PgorY29uc3QgSlNfRVhQ
T1JUREFUQSBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXlWYWx1ZT4+KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tl
dD4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09i
amVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
aGVhZCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2
aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRo
aXNPYmplY3QtPm1fYnVmZmVyLmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygp
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ+Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZp
c2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2lu
Z1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09IE1hcEJh
Y2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmpl
Y3QtPm1fYnVmZmVyLmdldCgpKSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogb2xkQnVm
ZmVyID0gdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJT
aXplSW5CeXRlcyA9IHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhh
c2hNYXBCdWZmZXJUeXBlKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyVHlw
ZSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOworICAgICAg
ICBtZW1jcHkobmV3QnVmZmVyLCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgdGhpc09iamVjdC0+bV9idWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVyKTsKKyAg
ICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEhhc2hNYXBCdWNrZXREYXRhS2V5
IHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworfTsKKworc3RydWN0IEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWUgeworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBrZXk7CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIERh
dGE+CitjbGFzcyBIYXNoTWFwQnVja2V0IDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0
aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXRE
YXRhS2V5Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0p
CisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQo
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3RhdGlj
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0
YUtleVZhbHVlPjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYg
dm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5n
ZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBI
YXNoTWFwQnVja2V0KiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tl
dCogYnVja2V0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEJ1Y2tldDxEYXRh
Pj4odm0uaGVhcCkpIEhhc2hNYXBCdWNrZXQodm0sIHNlbGVjdFN0cnVjdHVyZSh2bSkpOworICAg
ICAgICBidWNrZXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKCFidWNrZXQt
Pm5leHQoKSk7CisgICAgICAgIEFTU0VSVCghYnVja2V0LT5wcmV2KCkpOworICAgICAgICByZXR1
cm4gYnVja2V0OworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXQoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeyB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TmV4dChWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tl
dCkKKyAgICB7CisgICAgICAgIG1fbmV4dC5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CisgICAgfQor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRQcmV2KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVj
a2V0KQorICAgIHsKKyAgICAgICAgbV9wcmV2LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0S2V5KFZNJiB2bSwgSlNWYWx1ZSBrZXkpCisg
ICAgeworICAgICAgICBtX2RhdGEua2V5LnNldCh2bSwgdGhpcywga2V5KTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT46OnZhbHVlPjo6dHlwZSBzZXRWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBtX2RhdGEudmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleT46OnZhbHVl
Pjo6dHlwZSBzZXRWYWx1ZShWTSYsIEpTVmFsdWUpIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5rZXkuZ2V0KCk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6
dmFsdWUsIEpTVmFsdWU+Ojp0eXBlIHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2RhdGEudmFsdWUuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgQUxXQVlT
X0lOTElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgp
OyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVsZXRlZDsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZWxldGVkKGJvb2wgZGVsZXRl
ZCkgeyBtX2RlbGV0ZWQgPSBkZWxldGVkOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mS2V5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1
Y2tldCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBrZXkpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1
ZSwgcHRyZGlmZl90Pjo6dHlwZSBvZmZzZXRPZlZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRP
RihEYXRhLCB2YWx1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERhdGEgbV9kYXRhOworICAg
IFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX25leHQ7CisgICAgV3JpdGVCYXJyaWVyPEhh
c2hNYXBCdWNrZXQ+IG1fcHJldjsKKyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07Cit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBCdWZmZXIgewor
cHVibGljOgorICAgIEhhc2hNYXBCdWZmZXIoKSA9IGRlbGV0ZTsKKworICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1
cm4gY2FwYWNpdHkgKiBzaXplb2YoQnVja2V0VHlwZSopOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PEJ1Y2tldFR5cGUqKj4odGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIEhh
c2hNYXBCdWZmZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgdWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hN
YXBCdWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAgICAgdm9pZCogZGF0YSA9
IG51bGxwdHI7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIodm0uaGVhcCk7CisgICAg
ICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIGFsbG9jYXRpb25TaXpl
LCAmZGF0YSkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29w
ZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIEhh
c2hNYXBCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWZmZXIqPihkYXRhKTsK
KyAgICAgICAgbWVtc2V0KGJ1ZmZlciwgLTEsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgcmV0
dXJuIGJ1ZmZlcjsKKyAgICB9Cit9OworCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGFyZUtl
eXNFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIC8v
IFdlIHdhbnQgKzAgYW5kIC0wIHRvIGJlIGNvbXBhcmVkIHRvIHRydWUgaGVyZS4gc2FtZVZhbHVl
KCkgaXRzZWxmIGRvZXNuJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhhdCwgaG93ZXZlciwgd2Ugbm9y
bWFsaXplIGFsbCBrZXlzIGJlZm9yZSBjb21wYXJpbmcgYW5kIHN0b3JpbmcKKyAgICAvLyB0aGVt
IGluIHRoZSBtYXAuIFRoZSBub3JtYWxpemF0aW9uIHdpbGwgY29udmVydCAtMC4wIGFuZCAwLjAg
dG8gdGhlIGludGVnZXIKKyAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgMC4KKyAgICByZXR1cm4g
c2FtZVZhbHVlKGV4ZWMsIGEsIGIpOworfQorCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbm9ybWFs
aXplTWFwS2V5KEpTVmFsdWUga2V5KQoreworICAgIGlmICgha2V5LmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBrZXk7CisKKyAgICBpZiAoa2V5LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IGtleTsKKworICAgIGRvdWJsZSBkID0ga2V5LmFzRG91YmxlKCk7CisgICAgaWYgKHN0ZDo6aXNu
YW4oZCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGlu
dD4oZCk7CisgICAgaWYgKGkgPT0gZCkgeworICAgICAgICAvLyBXaGVuIGEga2V5IGlzIC0wLCB3
ZSBjb252ZXJ0IGl0IHRvIHBvc2l0aXZlIHplcm8uCisgICAgICAgIC8vIFdoZW4gYSBrZXkgaXMg
dGhlIGRvdWJsZSByZXByZXNlbnRhdGlvbiBmb3IgYW4gaW50ZWdlciwgd2UgY29udmVydCBpdCB0
byBhbiBpbnRlZ2VyLgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaSk7CisgICAgfQorICAgIC8v
IFRoaXMgbWVhbnMga2V5IGlzIGRlZmluaXRlbHkgbm90IG5lZ2F0aXZlIHplcm8sIGFuZCBpdCdz
IGRlZmluaXRlbHkgbm90IGEgZG91YmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIAor
ICAgIHJldHVybiBrZXk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0Uobm9ybWFsaXplTWFwS2V5KHZhbHVlKSA9PSB2YWx1ZSwgIldlIGV4cGVjdCBub3Jt
YWxpemVkIHZhbHVlcyBmbG93aW5nIGludG8gdGhpcyBmdW5jdGlvbi4iKTsKKworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0RvdWJs
ZSgpKSB7CisgICAgICAgIGRvdWJsZSBkID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICAgICAgaWYg
KCFzdGQ6OmlzbmFuKGQpKSB7CisgICAgICAgICAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4o
ZCk7CisgICAgICAgICAgICBpZiAoaSA9PSBkKQorICAgICAgICAgICAgICAgIHZhbHVlID0ganNO
dW1iZXIoaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsK
KyAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiB3dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOworICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OworICAgICAgICByZXR1cm4gd3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0KKworICAg
IGF1dG8gd2FuZ3NJbnQ2NEhhc2ggPSBbXSAodWludDY0X3Qga2V5KSAtPiB1aW50MzJfdCB7Cisg
ICAgICAgIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDIyKTsK
KyAgICAgICAga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gOCk7
CisgICAgICAgIGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICBrZXkgXj0gKGtleSA+PiAxNSk7
CisgICAgICAgIGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDMx
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpOworICAgIH07Cisg
ICAgdWludDY0X3QgcmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIHJldHVy
biB3YW5nc0ludDY0SGFzaChyYXdWYWx1ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNo
TWFwQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTQ2VsbCB7CisgICAg
dHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWZmZXI8SGFzaE1hcEJ1
Y2tldFR5cGU+IEhhc2hNYXBCdWZmZXJUeXBlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQg
PSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6dmFs
dWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAg
ICAgICByZXR1cm4gdm0uaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0
U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbE1h
cFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBIYXNoTWFwSW1wbCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpLCAiV2UgYXNzdW1lIHRoaXMgdG8gYmUgdHJ1
ZSBpbiB0aGUgREZHIGFuZCBGVEwgSklULiIpOworCisgICAgICAgIEhhc2hNYXBJbXBsKiBpbXBs
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXApKSBIYXNo
TWFwSW1wbCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGltcGwtPmZpbmlzaENy
ZWF0aW9uKGV4ZWMsIHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRp
YyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4p
OworCisgICAgSGFzaE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwg
bV9kZWxldGVDb3VudCgwKQorICAgICAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICB7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZlcigpOworICAgIH0KKwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgewor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4
ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVj
a2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIEhhc2hN
YXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKKworICAgICAgICBtX2hlYWQtPnNldE5leHQodm0s
IG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwgbV9oZWFkLmdldCgp
KTsKKyAgICAgICAgbV9oZWFkLT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBtX3RhaWwtPnNl
dERlbGV0ZWQodHJ1ZSk7CisKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUq
IGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFw
QnVja2V0VHlwZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTEpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRW1wdHkoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tl
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNrZXQgPT0gZW1wdHlWYWx1ZSgpOworICAgIH0K
KworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0VHlwZSogZGVsZXRlZFZhbHVlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldFR5cGUqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KC0zKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0RlbGV0ZWQoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBidWNrZXQgPT0gZGVsZXRlZFZhbHVlKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSkKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIHVpbnQz
Ml90IGhhc2ggPSBqc01hcEhhc2goZXhlYywgdm0sIGtleSk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
ZmluZEJ1Y2tldChleGVjLCBrZXksIGhhc2gpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIHVpbnQzMl90IGhhc2gpCisgICAgeworICAgICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXko
a2V5KTsKKyAgICAgICAgcmV0dXJuIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXpl
ZChleGVjLCBrZXksIGhhc2gpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIGlmIChIYXNo
TWFwQnVja2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KSkKKyAgICAgICAg
ICAgIHJldHVybiAoKmJ1Y2tldCktPnZhbHVlKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIWZpbmRCdWNrZXQoZXhlYywg
a2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlKCkpCisgICAgeworICAgICAg
ICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5KTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1aW50
MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCB2bSwga2V5KSAmIG1hc2s7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB3aGls
ZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0
KSAmJiBhcmVLZXlzRXF1YWwoZXhlYywga2V5LCBidWNrZXQtPmtleSgpKSkgeworICAgICAgICAg
ICAgICAgIGJ1Y2tldC0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFz
azsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKworICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV3RW50cnkgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAg
IGJ1ZmZlcltpbmRleF0gPSBuZXdFbnRyeTsKKyAgICAgICAgbmV3RW50cnktPnNldEtleSh2bSwg
a2V5KTsKKyAgICAgICAgbmV3RW50cnktPnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgIG5l
d0VudHJ5LT5zZXREZWxldGVkKGZhbHNlKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5l
d1RhaWwgPSBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgbV90YWlsLnNl
dCh2bSwgdGhpcywgbmV3VGFpbCk7CisgICAgICAgIG5ld1RhaWwtPnNldFByZXYodm0sIG5ld0Vu
dHJ5KTsKKyAgICAgICAgbmV3VGFpbC0+c2V0RGVsZXRlZCh0cnVlKTsKKyAgICAgICAgbmV3RW50
cnktPnNldE5leHQodm0sIG5ld1RhaWwpOworICAgICAgICB1aW50MzJfdCBuZXdTaXplID0gKytt
X3NpemU7CisgICAgICAgIGlmICgyKm5ld1NpemUgPiBtX2NhcGFjaXR5KQorICAgICAgICAgICAg
cmVoYXNoKGV4ZWMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXRU
eXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAgICAgICBpZiAoIWJ1Y2tl
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogaW1wbCA9ICpidWNrZXQ7CisgICAgICAg
IGltcGwtPm5leHQoKS0+c2V0UHJldih2bSwgaW1wbC0+cHJldigpKTsKKyAgICAgICAgaW1wbC0+
cHJldigpLT5zZXROZXh0KHZtLCBpbXBsLT5uZXh0KCkpOworICAgICAgICBpbXBsLT5zZXREZWxl
dGVkKHRydWUpOworCisgICAgICAgICpidWNrZXQgPSBkZWxldGVkVmFsdWUoKTsKKworICAgICAg
ICBtX2RlbGV0ZUNvdW50Kys7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSB1aW50MzJfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fc2l6ZSA+PSBtX2RlbGV0ZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIG1fc2l6
ZSAtIG1fZGVsZXRlQ291bnQ7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFy
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgICAgIG1fc2l6ZSA9IDA7CisgICAgICAgIG1fZGVsZXRlQ291bnQgPSAwOworICAgICAgICBI
YXNoTWFwQnVja2V0VHlwZSogaGVhZCA9IG1faGVhZC5nZXQoKTsKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIGJ1Y2tldCA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNoTWFwQnVja2V0
VHlwZSogdGFpbCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAhPSB0YWls
KSB7CisgICAgICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV4dCA9IGJ1Y2tldC0+bmV4dCgp
OworICAgICAgICAgICAgLy8gV2UgcmVzdGFydCBlYWNoIGl0ZXJhdG9yIGJ5IHBvaW50aW5nIGl0
IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LgorICAgICAgICAgICAgYnVja2V0LT5zZXROZXh0KHZt
LCBoZWFkKTsKKyAgICAgICAgICAgIGJ1Y2tldCA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgICAg
bV9oZWFkLT5zZXROZXh0KHZtLCBtX3RhaWwuZ2V0KCkpOworICAgICAgICBtX3RhaWwtPnNldFBy
ZXYodm0sIG1faGVhZC5nZXQoKSk7CisgICAgICAgIG1fY2FwYWNpdHkgPSA0OworICAgICAgICBt
YWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHNpemVfdCBidWZmZXJTaXplSW5CeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9jYXBhY2l0eSAqIHNpemVvZihIYXNoTWFwQnVja2V0VHlwZSopOworICAgIH0KKworICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCdWZmZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT4sIG1fYnVmZmVyKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FwYWNpdHkoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
VHlwZT4sIG1fY2FwYWNpdHkpOworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBoZWFk
KCkgeyByZXR1cm4gbV9oZWFkLmdldCgpOyB9CisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIHRhaWwo
KSB7IHJldHVybiBtX3RhaWwuZ2V0KCk7IH0KKworICAgIHNpemVfdCBhcHByb3hpbWF0ZVNpemUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoSGFzaE1hcEltcGwp
OworICAgICAgICBzaXplICs9IGJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIHNpemUgKz0g
MiAqIHNpemVvZihIYXNoTWFwQnVja2V0VHlwZSk7IC8vIEhlYWQgYW5kIHRhaWwgbWVtYmVycy4K
KyAgICAgICAgc2l6ZSArPSAobV9kZWxldGVDb3VudCArIG1fc2l6ZSkgKiBzaXplb2YoSGFzaE1h
cEJ1Y2tldFR5cGUpOyAvLyBOdW1iZXIgb2YgbWVtYmVycyBvbiB0aGUgbGlzdC4KKyAgICAgICAg
cmV0dXJuIHNpemU7CisgICAgfQorCitwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1h
cEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6ZWQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAgIGNv
bnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMyX3QgaW5k
ZXggPSBoYXNoICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0
aGlzLT5idWZmZXIoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZl
cltpbmRleF07CisKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAg
ICAgIGlmICghaXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVj
a2V0LT5rZXkoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciArIGluZGV4OworICAg
ICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNrZXQg
PSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIHZvaWQgcmVoYXNoKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgICAgICBtX2NhcGFjaXR5ID0gbV9jYXBhY2l0eSAqIDI7CisgICAgICAg
IG1ha2VBbmRTZXROZXdCdWZmZXIoZXhlYywgdm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEhhc2hNYXBC
dWNrZXRUeXBlKiBpdGVyID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRU
eXBlKiBlbmQgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBt
X2NhcGFjaXR5IC0gMTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1f
Y2FwYWNpdHkgLSAxKSkpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRo
aXMtPmJ1ZmZlcigpOworICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAg
IHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBpdGVyLT5rZXkoKSkgJiBtYXNr
OworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc2NvcGUuZXhjZXB0aW9uKCksICJB
bGwga2V5cyBzaG91bGQgYWxyZWFkeSBiZSBoYXNoZWQgYmVmb3JlLCBzbyB0aGlzIHNob3VsZCBu
b3QgdGhyb3cgYmVjYXVzZSBpdCB3b24ndCByZXNvbHZlIHJvcGVzLiIpOworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5k
ZXhdOworICAgICAgICAgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgICAg
ICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBpdGVyOworICAgICAgICAgICAgaXRl
ciA9IGl0ZXItPm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbWFrZUFuZFNl
dE5ld0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghKG1fY2FwYWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CisKKyAgICAgICAgSGFzaE1hcEJ1
ZmZlclR5cGUqIGJ1ZmZlciA9IEhhc2hNYXBCdWZmZXJUeXBlOjpjcmVhdGUoZXhlYywgdm0sIHRo
aXMsIG1fY2FwYWNpdHkpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBidWZmZXIpOwor
ICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2FwYWNpdHk7IGkrKykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNF
bXB0eSh0aGlzLT5idWZmZXIoKVtpXSkpOworICAgICAgICB9CisgICAgfQorCisgICAgV3JpdGVC
YXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBtX2hlYWQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hN
YXBCdWNrZXRUeXBlPiBtX3RhaWw7CisgICAgQ29weUJhcnJpZXI8SGFzaE1hcEJ1ZmZlclR5cGU+
IG1fYnVmZmVyOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICB1aW50MzJfdCBtX2RlbGV0ZUNv
dW50OworICAgIHVpbnQzMl90IG1fY2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCShyZXZpc2lv
biAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBlbnVtIEpTX0VYUE9SVF9QUklWQVRFIElu
dHJpbnNpYyB7CiAgICAgSXNSZWdFeHBPYmplY3RJbnRyaW5zaWMsCiAgICAgSXNUeXBlZEFycmF5
Vmlld0ludHJpbnNpYywKICAgICBCb3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxJbnRyaW5zaWMs
CisgICAgSlNNYXBHZXRJbnRyaW5zaWMsCisgICAgSlNNYXBIYXNJbnRyaW5zaWMsCisgICAgSlNT
ZXRIYXNJbnRyaW5zaWMsCiAKICAgICAvLyBHZXR0ZXIgaW50cmluc2ljcy4KICAgICBUeXBlZEFy
cmF5TGVuZ3RoSW50cmluc2ljLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDYsNiArNjA2LDkgQEAg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKU0NlbGwqIGEsIAogCiBib29sIGlzVGhpc1Zh
bHVlQWx0ZXJlZChjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBKU09iamVjdCogYmFzZU9iamVjdCk7
CiAKKy8vIFNlZSBzZWN0aW9uIDcuMi45OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1zYW1ldmFsdWUKK2Jvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYSwgSlNW
YWx1ZSBiKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0NKU1ZhbHVlX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1OCw2ICsxMDU4LDIy
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RoaXNWYWx1ZUFsdGVyZWQoY28KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZQorQUxXQVlTX0lOTElORSBib29sIHNhbWVWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIGlmICghYS5pc051bWJl
cigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7Cisg
ICAgaWYgKCFiLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUg
eCA9IGEuYXNOdW1iZXIoKTsKKyAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKKyAgICBib29s
IHhJc05hTiA9IHN0ZDo6aXNuYW4oeCk7CisgICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkp
OworICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQorICAgICAgICByZXR1cm4geElzTmFOICYmIHlJ
c05hTjsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpT
VmFsdWVJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQx
LDcgKzY0MSw3IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+UmVmbGVj
dCwgcmVmbGVjdE9iamVjdCwgRG9udEVudW0pOwogCiAgICAgbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX21vZHVsZUxvYWRlclByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1fbW9kdWxlTG9hZGVyLnNl
dCh2bSwgdGhpcywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZSh2bSwgdGhpcywgbV9tb2R1bGVMb2Fk
ZXJTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIEpT
TW9kdWxlTG9hZGVyOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB2bSwgdGhpcywgbV9tb2R1bGVMb2Fk
ZXJTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlSW50ZXJuYWxNb2R1
bGVMb2FkZXIoKSkKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPkxvYWRlciwgbV9tb2R1bGVMb2FkZXIuZ2V0KCksIERvbnRFbnVtKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw3OCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJKU01hcC5oIgogCi0jaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAi
SlNDSlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCi0jaW5jbHVk
ZSAiTWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNp
bmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBD
bGFzc0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFU
RV9NRVRIT0RfVEFCTEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBj
ZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0g
ICAgdGhpc09iamVjdC0+SlNNYXA6On5KU01hcCgpOwotfQotCi1zaXplX3QgSlNNYXA6OmVzdGlt
YXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0
PEpTTWFwKj4oY2VsbCk7Ci0gICAgc2l6ZV90IG1hcERhdGFTaXplID0gdGhpc09iamVjdC0+bV9t
YXBEYXRhLmNhcGFjaXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXpl
KGNlbGwpICsgbWFwRGF0YVNpemU7Ci19Ci0KIFN0cmluZyBKU01hcDo6dG9TdHJpbmdOYW1lKGNv
bnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJP
YmplY3QiKTsKIH0KIAotdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlz
aXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVu
KGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2Vs
bCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBC
YXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nhc3Q8
SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4p
OwotfQotCi1ib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsK
LSAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Ci19Ci0KLXNpemVfdCBK
U01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5zaXpl
KGV4ZWMpOwotfQotCi1KU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSkKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5KTsK
LSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlzLCBr
ZXksIHZhbHVlKTsKLX0KLQotdm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAgICBt
X21hcERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXkpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywga2V5
KTsKLX0KLQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZp
c2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0yNiwxMDggKzI2LDQ5IEBACiAjaWZuZGVmIEpTTWFwX2gKICNkZWZpbmUg
SlNNYXBfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJK
U09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi1jbGFzcyBKU01hcCA6
IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBNYXBC
YXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+IHsKKyAgICB0eXBl
ZGVmIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4gQmFz
ZTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7Ci0KICAg
ICBmcmllbmQgY2xhc3MgSlNNYXBJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0
aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAot
ICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFzcyBFbnRyeSB7
Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OwotICAg
ICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKLQotICAgIHB1YmxpYzoKLSAgICAg
ICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBXcml0
ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZtX2tleSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIs
IEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVy
LCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0
V3JpdGVCYXJyaWVyKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZN
JiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsK
LSAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0
eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBKU01hcEl0ZXJhdG9yPiBNYXBEYXRhOwotCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90
eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxP
YmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBp
bmZvKCkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVj
dCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0s
IHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
ICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVh
dGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5nZXQoZXhl
Yywga2V5KTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAg
ICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVjU3RhdGUqLCBKU1Zh
bHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAg
ICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSwgdmFsdWUpOworICAgIH0KIAogcHJpdmF0
ZToKICAgICBKU01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMpCiAgICAgewog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHNp
emVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0
b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5n
IHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwotCi0gICAgTWFwRGF0
YSBtX21hcERhdGE7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDYgKzI2LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJh
dG9yLmgiCiAKKyNpbmNsdWRlICJCdWlsdGluTmFtZXMuaCIKKyNpbmNsdWRlICJDb21tb25JZGVu
dGlmaWVycy5oIgorI2luY2x1ZGUgIklkZW50aWZpZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
SlNNYXAuaCIKQEAgLTQxLDYgKzQ0LDcgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjpmaW5pc2hDcmVh
dGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX21hcC5z
ZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJdGVyYXRvcih2bSwgbV9tYXAt
PmltcGwoKS0+aGVhZCgpKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00OSw2ICs1Myw3IEBAIHZv
aWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9tYXApOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIpOwogfQogCiBK
U1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
VmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNjIsOCArNjcsOSBAQCBKU1ZhbHVlIEpTTWFw
SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTTWFwSXRlcmF0b3IqIEpTTWFwSXRlcmF0
b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNsb25lID0gSlNNYXBJdGVy
YXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+
bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9tYXAuZ2V0KCksIG1fa2luZCk7Ci0gICAgY2xvbmUt
Pm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
YXV0byBjbG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwgbV9raW5k
KTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQoKSk7CiAgICAgcmV0dXJu
IGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNN
YXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAK
IG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yIDogcHVibGljIEpTTm9uRmlu
YWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eVZhbHVlPiBIYXNoTWFwQnVja2V0OwogcHVibGljOgogICAgIHR5cGVkZWYgSlNOb25GaW5hbE9i
amVjdCBCYXNlOwogCkBAIC01MSw1MiArNTIsNjIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIGFkdmFuY2VJ
dGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpT
VmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIp
KQorICAgICAgICBIYXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgpOworICAgICAgICBp
ZiAoIXByZXYpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldCogYnVja2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgJiYg
YnVja2V0LT5kZWxldGVkKCkpIHsKKyAgICAgICAgICAgIHByZXYgPSBidWNrZXQ7CisgICAgICAg
ICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJ1
Y2tldCkgeworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBzZXRJdGVyYXRv
cihleGVjLT52bSgpLCBidWNrZXQpOyAvLyBXZSBrZWVwIG1faXRlciBvbiB0aGUgbGFzdCB2YWx1
ZSBzaW5jZSB0aGUgZmlyc3QgdGhpbmcgd2UgZG8gaW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsIG5l
eHQoKS4KKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisgICAgYm9vbCBuZXh0KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0
KiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVyYXRlVmFs
dWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2YWx1ZSA9
IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJhdGVLZXkp
Ci0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBidWNr
ZXQtPmtleSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIo
Y2FsbEZyYW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZSA9IGNy
ZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT52YWx1ZSgpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFsdWUoSlNWYWx1ZSYga2V5
LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6OktleVZh
bHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0b3Iu
bmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gYWR2YW5jZUl0ZXIo
ZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgICAgIGtleSA9IHBhaXIua2V5OwotICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7Cisg
ICAgICAgIGtleSA9IGJ1Y2tldC0+a2V5KCk7CisgICAgICAgIHZhbHVlID0gYnVja2V0LT52YWx1
ZSgpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaCgpCi0g
ICAgewotICAgICAgICBtX2l0ZXJhdG9yLmZpbmlzaCgpOwotICAgIH0KLQogICAgIEl0ZXJhdGlv
bktpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIEpTVmFsdWUgaXRlcmF0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmdldCgpOyB9CiAgICAgSlNNYXBJdGVyYXRv
ciogY2xvbmUoRXhlY1N0YXRlKik7CiAKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JEYXRh
KiBpdGVyYXRvckRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICZtX2l0ZXJhdG9yOwotICAg
IH0KLQogcHJpdmF0ZToKLSAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIEpTTWFwKiBpdGVyYXRlZE9iamVjdCwgSXRlcmF0aW9uS2luZCBraW5kKQorICAgIEpT
TWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNNYXAqLCBJdGVyYXRp
b25LaW5kIGtpbmQpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1f
aXRlcmF0b3IoaXRlcmF0ZWRPYmplY3QtPm1fbWFwRGF0YS5jcmVhdGVJdGVyYXRvckRhdGEodGhp
cykpCiAgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeyB9CisKKyAgICB2b2lkIHNldEl0ZXJh
dG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQogICAgIHsKKyAgICAgICAgbV9pdGVy
LnNldE1heUJlTnVsbCh2bSwgdGhpcywgYnVja2V0KTsKICAgICB9CiAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKQEAgLTEwNCw3ICsxMTUs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xv
dFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAgSlNNYXA6
Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSBtX2l0ZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxIYXNo
TWFwQnVja2V0PiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSArNTUsMTQgQEAgSlNNb2R1bGVM
b2FkZXI6OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwgUwogewogfQogCi12b2lkIEpTTW9kdWxlTG9h
ZGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
Cit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBKU01hcDo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRl
KGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6
ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBtYXApOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9h
ZGVyLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTW9kdWxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBwdWJs
aWM6CiAgICAgICAgIFJlYWR5ID0gNiwKICAgICB9OwogCi0gICAgc3RhdGljIEpTTW9kdWxlTG9h
ZGVyKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNNb2R1bGVMb2FkZXIqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU01vZHVsZUxvYWRlciogb2JqZWN0ID0gbmV3
IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVMb2FkZXI+KHZtLmhlYXApKSBKU01vZHVs
ZUxvYWRlcih2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2
bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCB2
bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKQEAgLTc3
LDcgKzc3LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3JkLCBKU1ZhbHVlIGluaXRpYXRvcik7CiAKIHBy
b3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsK
KyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJiwgSlNHbG9iYWxPYmplY3Qq
KTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NywxNCArNDcsMTcgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZGVzdHJveShK
U0NlbGwqIGNlbAogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlUmVjb3JkOjp+SlNNb2R1bGVSZWNv
cmQoKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQor
dm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0
cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZt
LCBBU0NJSUxpdGVyYWwoInJlZ2lzdHJ5RW50cnkiKSksIGpzVW5kZWZpbmVkKCkpOwogICAgIHB1
dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZXZh
bHVhdGVkIikpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIG1fZGVwZW5kZW5jaWVzTWFwLnNl
dCh2bSwgdGhpcywgSlNNYXA6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCktPm1hcFN0cnVjdHVy
ZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpT
TWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+bWFwU3Ry
dWN0dXJlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAg
bV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwogICAgIHB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZGVwZW5kZW5jaWVzTWFw
IikpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjA1MzA1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODcsMTAgKzg3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU01v
ZHVsZVJlY29yZCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3Qg
VmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgc3RhdGljIEpTTW9kdWxlUmVjb3JkKiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgSlNNb2R1bGVS
ZWNvcmQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVSZWNv
cmQ+KHZtLmhlYXApKSBKU01vZHVsZVJlY29yZCh2bSwgc3RydWN0dXJlLCBtb2R1bGVLZXksIHNv
dXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKTsKLSAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAt
MTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJik7
CiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogZ2V0TW9kdWxlTmFtZXNwYWNlKEV4ZWNT
dGF0ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcwICsyNiwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkpTU2V0LmgiCiAKLSNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIK
LSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3Iu
aCIKLSNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKLQogbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0IiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAotdm9pZCBKU1NldDo6ZGVzdHJv
eShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQq
PihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU1NldDo6fkpTU2V0KCk7Ci19Ci0KIFN0cmluZyBK
U1NldDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICBy
ZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3QiKTsKIH0KIAotc2l6ZV90IEpTU2V0Ojplc3RpbWF0
ZWRTaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U1NldCo+KGNlbGwpOwotICAgIHNpemVfdCBzZXREYXRhU2l6ZSA9IHRoaXNPYmplY3QtPm1fc2V0
RGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKLSAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShj
ZWxsKSArIHNldERhdGFTaXplOwotfQotCi12b2lkIEpTU2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJl
bihjZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLnZp
c2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNTZXQ6OmNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2Vu
KQotewotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwot
ICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNp
dG9yLCB0b2tlbik7Ci19Ci0KLWJvb2wgSlNTZXQ6OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5jb250YWlucyhleGVjLCB2YWx1ZSk7
Ci19Ci0KLXNpemVfdCBKU1NldDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJu
IG1fc2V0RGF0YS5zaXplKGV4ZWMpOwotfQotCi12b2lkIEpTU2V0OjphZGQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIG1fc2V0RGF0YS5zZXQoZXhlYywgdGhpcywgdmFs
dWUsIHZhbHVlKTsKLX0KLQotdm9pZCBKU1NldDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAgICBt
X3NldERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBKU1NldDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9zZXREYXRhLnJlbW92ZShleGVjLCB2
YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsMTAzICsyNiw0NSBAQAogI2lmbmRlZiBKU1NldF9oCiAjZGVm
aW5lIEpTU2V0X2gKIAotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5jbHVkZSAiTWFwQmFzZS5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNTZXRJdGVyYXRvcjsKIAotY2xhc3MgSlNT
ZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeworY2xhc3MgSlNTZXQgOiBwdWJsaWMg
TWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4geworICAgIHR5cGVk
ZWYgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj4gQmFzZTsKIHB1
YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7CiAKICAgICBmcmll
bmQgY2xhc3MgSlNTZXRJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBl
eHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAotICAgIC8v
IGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAg
cHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OwotCi0gICAgcHVi
bGljOgotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tleTsKLSAgICAgICAgfQotCi0gICAgICAg
IGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0
Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleShW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGtleSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiwgY29uc3QgSlNDZWxsKiwgSlNWYWx1ZSkKLSAg
ICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhcigpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fa2V5LmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdHlwZWRl
ZiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNTZXRJdGVyYXRvcj4gU2V0RGF0YTsKLQogICAgIERFQ0xB
UkVfRVhQT1JUX0lORk87CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygp
KTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHBy
b3RvdHlwZSwgVHlwZUluZm8oSlNTZXRUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAg
ICAgfQogCi0gICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU1NldCogaW5zdGFuY2UgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1NldD4odm0uaGVhcCkpIEpTU2V0KHZtLCBzdHJ1
Y3R1cmUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0pOwogICAgICAgICByZXR1cm4gaW5zdGFu
Y2U7CiAgICAgfQogCi0gICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiAgICAgewotICAgICAgICByZXR1cm4gY3JlYXRlKGV4ZWMt
PnZtKCksIHN0cnVjdHVyZSk7CisgICAgICAgIG1fbWFwLT5hZGQoZXhlYywga2V5KTsKICAgICB9
CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBzaXplX3Qgc2l6ZShF
eGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFkZChFeGVjU3RhdGUqLCBK
U1ZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpOwotCiBwcml2YXRlOgogICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAs
IG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVz
dHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7
Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwot
ICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBD
b3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKik7Ci0KLSAgICBTZXREYXRhIG1fc2V0RGF0YTsKIH07CiAKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCB2b2lkIEpTU2V0SXRl
cmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIG1fc2V0LnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0
ZXJhdG9yKHZtLCBtX3NldC0+aW1wbCgpLT5oZWFkKCkpOwogfQogCiB2b2lkIEpTU2V0SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAg
LTQ5LDYgKzUwLDcgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAog
ICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBC
YXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3NldCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1faXRlcik7CiB9CiAKIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCkBAIC02Miw4ICs2NCw5
IEBAIEpTVmFsdWUgSlNTZXRJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNTZXRJdGVy
YXRvciogSlNTZXRJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8g
Y2xvbmUgPSBKU1NldEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCkt
Pmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBtX3NldC5nZXQoKSwgbV9r
aW5kKTsKLSAgICBjbG9uZS0+bV9pdGVyYXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBhdXRvIGNsb25lID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKHZtLCBl
eGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIG1f
c2V0LmdldCgpLCBtX2tpbmQpOworICAgIGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdl
dCgpKTsKICAgICByZXR1cm4gY2xvbmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMzUsNiArMzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3Ig
OiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5PiBIYXNoTWFwQnVja2V0OwogcHVibGljOgogICAgIHR5cGVkZWYg
SlNOb25GaW5hbE9iamVjdCBCYXNlOwogCkBAIC01Miw0NiArNTMsNTkgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNr
ZXQqIGFkdmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5
VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRv
ci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0KiBwcmV2ID0gbV9pdGVyLmdldCgp
OworICAgICAgICBpZiAoIXByZXYpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0ID0gbV9pdGVyLT5uZXh0KCk7CisgICAgICAgIHdoaWxl
IChidWNrZXQgJiYgYnVja2V0LT5kZWxldGVkKCkpIHsKKyAgICAgICAgICAgIHByZXYgPSBidWNr
ZXQ7CisgICAgICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwg
bnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAg
ICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBidWNrZXQpOyAvLyBXZSBrZWVwIG1faXRlciBvbiB0
aGUgbGFzdCB2YWx1ZSBzaW5jZSB0aGUgZmlyc3QgdGhpbmcgd2UgZG8gaW4gdGhpcyBmdW5jdGlv
biBpcyBjYWxsIG5leHQoKS4KKyAgICAgICAgcmV0dXJuIGJ1Y2tldDsKKyAgICB9CisKKyAgICBi
b29sIG5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAo
IWJ1Y2tldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBpZiAobV9raW5k
ID09IEl0ZXJhdGVWYWx1ZSB8fCBtX2tpbmQgPT0gSXRlcmF0ZUtleSkKLSAgICAgICAgICAgIHZh
bHVlID0gcGFpci5rZXk7CisgICAgICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+a2V5KCk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIu
a2V5LCBwYWlyLmtleSk7CisgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVj
a2V0LT5rZXkoKSwgYnVja2V0LT5rZXkoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIHZvaWQgZmluaXNoKCkKLSAgICB7Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7
Ci0gICAgfQotCiAgICAgSXRlcmF0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CiAgICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuZ2V0
KCk7IH0KICAgICBKU1NldEl0ZXJhdG9yKiBjbG9uZShFeGVjU3RhdGUqKTsKIAotICAgIEpTU2V0
OjpTZXREYXRhOjpJdGVyYXRvckRhdGEqIGl0ZXJhdG9yRGF0YSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gJm1faXRlcmF0b3I7Ci0gICAgfQotCiBwcml2YXRlOgotICAgIEpTU2V0SXRlcmF0b3Io
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0LCBJdGVy
YXRpb25LaW5kIGtpbmQpCisgICAgSlNTZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1NldCosIEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCi0gICAgICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bV9zZXREYXRh
LmNyZWF0ZUl0ZXJhdG9yRGF0YSh0aGlzKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7
CiAgICAgfQogCisgICAgdm9pZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1
Y2tldCkKKyAgICB7CisgICAgICAgIG1faXRlci5zZXRNYXlCZU51bGwodm0sIHRoaXMsIGJ1Y2tl
dCk7IAorICAgIH0KKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24o
Vk0mLCBKU1NldCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFpcihD
YWxsRnJhbWUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNTZXQ+IG1f
c2V0OwotICAgIEpTU2V0OjpTZXREYXRhOjpJdGVyYXRvckRhdGEgbV9pdGVyYXRvcjsKKyAgICBX
cml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9pdGVyOwogICAgIEl0ZXJhdGlvbktpbmQgbV9r
aW5kOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU1NldEl0
ZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCShyZXZp
c2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtODIsOCArODIsMTAgQEAgZW51bSBKU1R5cGUgOiB1aW50OF90IHsK
ICAgICBNb2R1bGVFbnZpcm9ubWVudFR5cGUsCiAgICAgUmVnRXhwT2JqZWN0VHlwZSwKICAgICBQ
cm94eU9iamVjdFR5cGUsCisgICAgSlNNYXBUeXBlLAorICAgIEpTU2V0VHlwZSwKIAotICAgIExh
c3RKU0NPYmplY3RUeXBlID0gUHJveHlPYmplY3RUeXBlLAorICAgIExhc3RKU0NPYmplY3RUeXBl
ID0gSlNTZXRUeXBlLAogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEpTVHlwZSkgPT0gc2l6
ZW9mKHVpbnQ4X3QpLCBzaXplb2ZfanN0eXBlX2lzX29uZV9ieXRlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWFwQmFzZS5oIgorCisjaW5jbHVkZSAi
U2xvdFZpc2l0b3JJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+Cit2b2lkIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgTWFwQmFzZSogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PE1hcEJhc2UqPihjZWxsKTsKKyAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNo
TWFwQnVja2V0VHlwZT4KK3NpemVfdCBNYXBCYXNlPEhhc2hNYXBCdWNrZXRUeXBlPjo6ZXN0aW1h
dGVkU2l6ZShKU0NlbGwqIGNlbGwpCit7CisgICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUo
Y2VsbCkgKyBzdGF0aWNfY2FzdDxNYXBCYXNlKj4oY2VsbCktPm1fbWFwLT5hcHByb3hpbWF0ZVNp
emUoKTsKK30KKwordGVtcGxhdGUgY2xhc3MgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+PjsKK3RlbXBsYXRlIGNsYXNzIE1hcEJhc2U8SGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisjaW5jbHVkZSAiSlNP
YmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFw
QnVja2V0VHlwZT4KK2NsYXNzIE1hcEJhc2UgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7Cisg
ICAgdHlwZWRlZiBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT4gSGFzaE1hcEltcGxUeXBl
OworICAgIHR5cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOworcHVibGljOgorCisgICAgdHlw
ZWRlZiBIYXNoTWFwQnVja2V0VHlwZSBCdWNrZXRUeXBlOworCisgICAgQUxXQVlTX0lOTElORSBz
aXplX3Qgc2l6ZShFeGVjU3RhdGUqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5zaXpl
KCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5oYXMoZXhlYywga2V5
KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY2xlYXIoRXhlY1N0YXRlKiBleGVj
KQorICAgIHsKKyAgICAgICAgbV9tYXAtPmNsZWFyKGV4ZWMpOworICAgIH0KKworICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX21hcC0+cmVtb3ZlKGV4ZWMsIGtleSk7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X21hcC0+ZmluZEJ1Y2tldChleGVjLCBrZXksIGhhc2gpOworICAgIH0KKworICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZIYXNoTWFwSW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gT0JK
RUNUX09GRlNFVE9GKE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+LCBtX21hcCk7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwSW1wbFR5cGUqIGltcGwoKSB7IHJldHVybiBtX21h
cC5nZXQoKTsgfQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSkKKyAgICB7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBIYXNoTWFwSW1w
bFR5cGUqIGltcGwgPSBIYXNoTWFwSW1wbFR5cGU6OmNyZWF0ZShleGVjLCB2bSk7CisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fbWFwLnNldCh2bSwgdGhpcywgaW1wbCk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgTWFwQmFzZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHNpemVfdCBlc3RpbWF0
ZWRTaXplKEpTQ2VsbCopOworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwSW1wbFR5cGU+IG1fbWFw
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDkgKzYyLDExIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFs
RnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUq
IG1hcFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJl
KGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwor
ICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBtYXBTdHJ1Y3R1cmUpOwor
ICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShl
eGVjLCBtYXBTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVu
dCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShtYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgTWFwSXRlcmF0b3IKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAoaXRl
cmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxz
ZSkpOwotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1
ZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDE0ICs3MCwxMyBA
QCB2b2lkIE1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwg
bWFwUHJvdG9GdW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBtYXBQ
cm90b0Z1bmNEZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwg
RG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSk7Cisg
ICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSwgSlNNYXBHZXRJ
bnRyaW5zaWMpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVudW0s
IDEsIEpTTWFwSGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5zZXQsIG1hcFByb3RvRnVuY1NldCwgRG9udEVu
dW0sIDIpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmtleXNQdWJsaWNOYW1lKCksIG1hcFByb3RvRnVu
Y0tleXMsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1l
KCksIG1hcFByb3RvRnVuY1ZhbHVlcywgRG9udEVudW0sIDApOwogCi0gICAgLy8gUHJpdmF0ZSBn
ZXQgLyBzZXQgb3BlcmF0aW9ucy4KLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2YXRlTmFtZSgp
LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJ
Q19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5h
bWVzKCkuZ2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSwgSlNN
YXBHZXRJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnNldFByaXZhdGVOYW1lKCksIG1h
cFByb3RvRnVuY1NldCwgRG9udEVudW0sIDIpOwogCiAgICAgSlNGdW5jdGlvbiogZW50cmllcyA9
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAwLCB2bS5wcm9wZXJ0eU5hbWVz
LT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLnN0cmluZygpLCBtYXBQcm90b0Z1
bmNFbnRyaWVzKTsKQEAgLTkzLDE2ICs5MiwyMSBAQCBBTFdBWVNfSU5MSU5FIHN0YXRpYyBKU01h
cCogZ2V0TWFwKENhbGxGCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlmICghdGhpc1ZhbHVlLmlz
T2JqZWN0KCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5pc0NlbGwoKSkpIHsKICAg
ICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0ZU5vdEFuT2JqZWN0RXJy
b3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
fQotICAgIEpTTWFwKiBtYXAgPSBqc0R5bmFtaWNDYXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKLSAg
ICBpZiAoIW1hcCkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0IikpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJuIG1hcDsKKworICAgIGlm
IChMSUtFTFkodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNNYXBUeXBlKSkKKyAgICAg
ICAgcmV0dXJuIGpzQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7CisgICAgdGhyb3dUeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBu
b24tTWFwIG9iamVjdCIpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBKU1ZhbHVlIHZhbHVlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odmFsdWUuaXNDZWxsKCkgJiYgdmFsdWUuYXNDZWxs
KCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBtYXBQcm90b0Z1bmNDbGVhcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTE4OSwxMSAr
MTkzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXBQcm90b0Z1bgogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBjYWxsRnJhbWUt
PmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgdGhpc09i
aiwgSXRlcmF0ZUtleSkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZh
dGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSkpKTsKLX0KLQogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY01h
cEl0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxK
U01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSk7CkBAIC0yMDYsMTMgKzIwNSwxMiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jCiAgICAgQVNTRVJUKGpz
RHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGV4ZWMtPnRoaXNWYWx1ZSgpKSk7CiAgICAgSlNN
YXBJdGVyYXRvciogaXRlcmF0b3IgPSBqc0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGV4ZWMtPnRoaXNW
YWx1ZSgpKTsKICAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgaWYgKGl0ZXJhdG9yLT5uZXh0
S2V5VmFsdWUoa2V5LCB2YWx1ZSkpIHsKKyAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShl
eGVjLCBrZXksIHZhbHVlKSkgewogICAgICAgICBKU0FycmF5KiByZXN1bHRBcnJheSA9IGpzQ2Fz
dDxKU0FycmF5Kj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgICAgICByZXN1bHRB
cnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwga2V5KTsKICAgICAgICAgcmVzdWx0QXJyYXkt
PnB1dERpcmVjdEluZGV4KGV4ZWMsIDEsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICB9Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2Ny
aXB0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsMjIgKzE5
MSw2IEBAIHZvaWQgUHJvcGVydHlEZXNjcmlwdG9yOjpzZXRHZXR0ZXIoSlNWYWwKICAgICBtX2F0
dHJpYnV0ZXMgJj0gflJlYWRPbmx5OwogfQogCi0vLyBTZWUgRVM1LjEgOS4xMgotYm9vbCBzYW1l
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKLXsKLSAgICBpZiAo
IWEuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMs
IGEsIGIpOwotICAgIGlmICghYi5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgZG91YmxlIHggPSBhLmFzTnVtYmVyKCk7Ci0gICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7
Ci0gICAgYm9vbCB4SXNOYU4gPSBzdGQ6OmlzbmFuKHgpOwotICAgIGJvb2wgeUlzTmFOID0gc3Rk
Ojppc25hbih5KTsKLSAgICBpZiAoeElzTmFOIHx8IHlJc05hTikKLSAgICAgICAgcmV0dXJuIHhJ
c05hTiAmJiB5SXNOYU47Ci0gICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgPT0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90Pih5KTsKLX0KLQogYm9vbCBQcm9wZXJ0eURlc2NyaXB0b3I6
OmVxdWFsVG8oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIG90aGVy
KSBjb25zdAogewogICAgIGlmIChvdGhlci5tX3ZhbHVlLmlzRW1wdHkoKSAhPSBtX3ZhbHVlLmlz
RW1wdHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNj
cmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5
ICszMiw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiAKLS8vIFNl
ZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlLCBKU1ZhbHVl
KTsKLQogY2xhc3MgUHJvcGVydHlEZXNjcmlwdG9yIHsKIHB1YmxpYzoKICAgICBQcm9wZXJ0eURl
c2NyaXB0b3IoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3Ry
dWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nl
dENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2
MywxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNh
bGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiBzZXRTdHJ1Y3R1cmUgPSBJ
bnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdU
YXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBKU1NldCogc2V0ID0g
SlNTZXQ6OmNyZWF0ZShleGVjLCB2bSwgc2V0U3RydWN0dXJlKTsKKyAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFs
dWUoKSk7Ci0gICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUoZXhlYywgc2V0U3RydWN0dXJl
KTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0
ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9y
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjAsNyArNjAsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIFNldEl0
ZXJhdG9yCiAKICAgICBpZiAoaXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNh
bGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOwotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJhdG9yUmVzdWx0T2JqZWN0KGNhbGxGcmFt
ZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bQogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmFkZCwgc2V0UHJvdG9GdW5jQWRkLCBEb250RW51bSwgMSk7CiAgICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIs
IHNldFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElP
Tl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgc2V0
UHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBzZXRQcm90b0Z1bmNIYXMs
IERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VU
X1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBzZXRQcm90b0Z1bmNIYXMsIERvbnRF
bnVtLCAxLCBKU1NldEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRI
T1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1
YmxpY05hbWUoKSwgc2V0UHJvdG9GdW5jRW50cmllcywgRG9udEVudW0sIDApOwogCiAgICAgSlNG
dW5jdGlvbiogdmFsdWVzID0gSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAs
IHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKS5zdHJp
bmcoKSwgc2V0UHJvdG9GdW5jVmFsdWVzKTsKQEAgLTg3LDE2ICs4NywxNCBAQCBBTFdBWVNfSU5M
SU5FIHN0YXRpYyBKU1NldCogZ2V0U2V0KENhbGxGCiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOwogICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAotICAgIGlm
ICghdGhpc1ZhbHVlLmlzT2JqZWN0KCkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIXRoaXNWYWx1ZS5p
c0NlbGwoKSkpIHsKICAgICAgICAgdGhyb3dWTUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIGNyZWF0
ZU5vdEFuT2JqZWN0RXJyb3IoY2FsbEZyYW1lLCB0aGlzVmFsdWUpKTsKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQotICAgIEpTU2V0KiBzZXQgPSBqc0R5bmFtaWNDYXN0PEpTU2V0Kj4o
dGhpc1ZhbHVlKTsKLSAgICBpZiAoIXNldCkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihjYWxs
RnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNldCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1T
ZXQgb2JqZWN0IikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgcmV0dXJu
IHNldDsKKyAgICBpZiAoTElLRUxZKHRoaXNWYWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpTU2V0
VHlwZSkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNTZXQqPih0aGlzVmFsdWUpOworICAgIHRo
cm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU2V0IG9wZXJhdGlv
biBjYWxsZWQgb24gbm9uLVNldCBvYmplY3QiKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc2V0UHJvdG9GdW5jQWRkKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtMTg2LDcgKzE4NCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZUZ1bmMKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMs
IDAsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZh
bHNlKSk7CiAgICAgfQotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQAogI2luY2x1
ZGUgIkpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZp
cm9ubWVudC5oIgogI2luY2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5j
bHVkZSAiSlNQcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1l
cmF0b3IuaCIKICNpbmNsdWRlICJKU1RlbXBsYXRlUmVnaXN0cnlLZXkuaCIKQEAgLTI0OSw2ICsy
NTAsMTAgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogI2lmIEVO
QUJMRShXRUJBU1NFTUJMWSkKICAgICB3ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQo
KnRoaXMsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAjZW5kaWYKKyAgICBoYXNoTWFwQnVja2V0U2V0U3RydWN0dXJlLnNldCgqdGhp
cywgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLnNldCgq
dGhpcywgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGhhc2hNYXBJbXBsU2V0U3RydWN0dXJl
LnNldCgqdGhpcywgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcElt
cGxNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogCiAgICAgaXRlcmF0aW9uVGVybWluYXRvci5zZXQoKnRoaXMsIEpTRmluYWxPYmplY3Q6
OmNyZWF0ZSgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSwgMSkpKTsKICAgICBuYXRpdmVTdGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBOYXRpdmVTdGRGdW5jdGlvbkNlbGw6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzMxLDYgKzMzMSwxMCBAQCBwdWJsaWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZXZh
bENvZGVCbG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBmdW5jdGlvbkNvZGVC
bG9ja1N0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWJBc3NlbWJseUNvZGVCbG9j
a1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFwQnVja2V0U2V0U3RydWN0
dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmU7Cisg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25n
PFN0cnVjdHVyZT4gaGFzaE1hcEltcGxNYXBTdHJ1Y3R1cmU7CiAKICAgICBTdHJvbmc8SlNDZWxs
PiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVydHlO
YW1lRW51bWVyYXRvcjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE2
LTA5LTAxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2Ug
SlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBGb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL01hcEJhc2UuaDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lU2Vy
aWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNsb25lRGVzZXJpYWxpemVy
OjpkZXNlcmlhbGl6ZSk6CisKIDIwMTYtMDktMDEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggTWFjIENNYWtlIGJ1aWxkIGFmdGVyIHIy
MDUyNjYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0hh
c2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvcnVudGltZS9IYXNoTWFwSW1wbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9IYXNoTWFwSW1wbF9oCisjZGVmaW5l
IFdlYkNvcmVfRldEX0hhc2hNYXBJbXBsX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IYXNo
TWFwSW1wbC5oPgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL01hcEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJk
aW5nSGVhZGVycy9ydW50aW1lL01hcEJhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNCBAQAorI2lmbmRlZiBXZWJDb3JlX0ZXRF9NYXBCYXNlX2gKKyNkZWZpbmUgV2Vi
Q29yZV9GV0RfTWFwQmFzZV9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWFwQmFzZS5oPgor
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzNjgsNyArMTM2OCw3IEBAIFNlcmlhbGl6YXRpb25SZXR1cm5Db2RlIENsb25lU2VyaWFsaXpl
cjoKICAgICAgICAgICAgIGNhc2UgTWFwRGF0YVN0YXJ0VmlzaXRFbnRyeTogewogICAgICAgICAg
ICAgICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0gbWFwSXRlcmF0b3JTdGFjay5sYXN0KCk7
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAgICAgICAgICAgICAgIGlm
ICghaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShrZXksIHZhbHVlKSkgeworICAgICAgICAgICAgICAg
IGlmICghaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShtX2V4ZWMsIGtleSwgdmFsdWUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1hcEl0ZXJhdG9yU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICAgICAg
ICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gaW5wdXRPYmplY3RTdGFjay5sYXN0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4ob2JqZWN0KSk7
CkBAIC0yNTQ1LDcgKzI1NDUsOSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlh
bGl6ZXI6CiAgICAgICAgIG1hcE9iamVjdFN0YXJ0U3RhdGU6IHsKICAgICAgICAgICAgIGlmIChv
dXRwdXRPYmplY3RTdGFjay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQogICAgICAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFN0YWNrT3ZlcmZsb3dF
cnJvcik7Ci0gICAgICAgICAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShtX2V4ZWMtPnZt
KCksIG1fZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBKU01hcCog
bWFwID0gSlNNYXA6OmNyZWF0ZShtX2V4ZWMsIG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3Qt
Pm1hcFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9n
Y0J1ZmZlci5hcHBlbmQobWFwKTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVu
ZChtYXApOwogICAgICAgICAgICAgbWFwU3RhY2suYXBwZW5kKG1hcCk7CkBAIC0yNTc0LDcgKzI1
NzYsOSBAQCBEZXNlcmlhbGl6YXRpb25SZXN1bHQgQ2xvbmVEZXNlcmlhbGl6ZXI6CiAgICAgICAg
IHNldE9iamVjdFN0YXJ0U3RhdGU6IHsKICAgICAgICAgICAgIGlmIChvdXRwdXRPYmplY3RTdGFj
ay5zaXplKCkgPiBtYXhpbXVtRmlsdGVyUmVjdXJzaW9uKQogICAgICAgICAgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihKU1ZhbHVlKCksIFN0YWNrT3ZlcmZsb3dFcnJvcik7Ci0gICAgICAg
ICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2Jq
ZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNy
ZWF0ZShtX2V4ZWMsIG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgp
KTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShtX2V4ZWMtPmhhZEV4Y2VwdGlvbigpKSkKKyAg
ICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgbV9nY0J1ZmZlci5hcHBlbmQo
c2V0KTsKICAgICAgICAgICAgIG91dHB1dE9iamVjdFN0YWNrLmFwcGVuZChzZXQpOwogICAgICAg
ICAgICAgc2V0U3RhY2suYXBwZW5kKHNldCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287802</attachid>
            <date>2016-09-02 12:48:48 -0700</date>
            <delta_ts>2016-09-02 12:54:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>179847</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbnNlLXNldC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHJldmlzaW9uIDApCisrKyBK
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIAorICAgIGZ1bmN0aW9uIGJlbmNoKG5hbWUs
IGYsIGFyZykgeworICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGYoYXJnKTsKKyAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlOworICAgICAgICBjb25z
dCB2ZXJib3NlID0gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJp
bnQobmFtZSArICIgIiArIHJlc3VsdCArICIgIiArIChlbmQtc3RhcnQpICsgIm1zIik7CisgICAg
fQorCisgICAgdmFyIGRlbnNlU2V0ID0gbmV3IFNldDsKKyAgICB2YXIgZXhjbHVkZVNldCA9IFsx
MjMsIDEyMzAsIDEyMzAwLCAxMjMwMDAsIDIzNCwgMjM0MCwgMjM0MDBdOworICAgIGZvciAodmFy
IGlkeCA9IDA7IGlkeCA8IDVlNjsgKytpZHgpIHsKKyAgICAgICAgaWYgKGV4Y2x1ZGVTZXQuaW5j
bHVkZXMoaWR4KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkZW5zZVNldC5hZGQo
aWR4KTsKKyAgICB9CisKKyAgICBiZW5jaCgiRGVuc2UgU2V0IFByb3BlcnR5IEV4aXN0ZW5jZSIs
IGZ1bmN0aW9uKHMpIHsKKyAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCA1ZTY7ICsraSkKKyAgICAgICAgICAgIGlmIChzLmhhcyhpKSkKKyAgICAgICAg
ICAgICAgICBjb3VudCsrCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9LCBkZW5zZVNldCk7
CisKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0
aW9uLXdpdGgtYWRkaXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2xhcmdlLW1hcC1pdGVyYXRpb24td2l0aC1hZGRpdGlvbnMuanMJKHJldmlzaW9uIDApCisr
KyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdpdGgtYWRkaXRp
b25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2xldCBjb3VudGVyID0gMDsK
K2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7
CisgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC45NSkgeworICAgICAgICAgICAgbWFwLnNl
dCgiIiArIGNvdW50ZXIsIGNvdW50ZXIpOworICAgICAgICAgICAgKytjb3VudGVyOworICAgICAg
ICB9CisgICAgfQorfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIGxl
dCBtYXAgPSBuZXcgTWFwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAg
ICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXApOworICAgIGNv
bnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0
ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdpdGgtbXV0YXRpb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRoLW11dGF0aW9u
LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0
ZXJhdGlvbi13aXRoLW11dGF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAK
K2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7
CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjk1
KSB7CisgICAgICAgICAgICBtYXAuZGVsZXRlKGtleSk7CisgICAgICAgIH0KKyAgICB9Cit9Citu
b0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDsgaSsrKQorICAgICAgICBtYXAuc2V0KGks
IGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXApOworICAgIGNvbnN0IHZlcmJvc2UgPSBm
YWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0
KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAt
aXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2xhcmdl
LW1hcC1pdGVyYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9sYXJnZS1tYXAtaXRlcmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAK
K2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7
CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICB9Cit9Citub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKQorICAgICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3Rh
cnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAg
ICAgIGJhcihtYXApOworICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4
OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9tYXAtaGFzLWdldC1jc2Utb3Bwb3J0dW5pdHkuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFwLWhhcy1nZXQtY3NlLW9w
cG9ydHVuaXR5LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFw
LWhhcy1nZXQtY3NlLW9wcG9ydHVuaXR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgg
QEAKK2Z1bmN0aW9uIGJhcihtYXAsIHApIHsKKyAgICBpZiAobWFwLmhhcyhwKSkKKyAgICAgICAg
cmV0dXJuIG1hcC5nZXQocCk7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oKSB7
CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbGV0IGl0ZW1zID0gWworICAgICAgICBbMTAs
IDUwXSwKKyAgICAgICAgWyI0NTAiLCA3OF0sCisgICAgICAgIFt7fSwge31dLAorICAgICAgICBb
U3ltYm9sKCksIHRydWVdLAorICAgICAgICBbdW5kZWZpbmVkLCBudWxsXSwKKyAgICAgICAgW3Ry
dWUsIG51bGxdLAorICAgICAgICBbZmFsc2UsIHRydWVdLAorICAgICAgICBbNDUuODcsIHt9XQor
ICAgIF07CisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGl0ZW1zKQorICAgICAgICBtYXAu
c2V0KGtleSwgdmFsdWUpOworICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyBpKyspCisgICAgICAgIGJhcihtYXAsIGl0ZW1zW2kgJSBp
dGVtcy5sZW5ndGhdWzBdKTsKKyAgICBjb25zdCB2ZXJib3NlID0gZmFsc2U7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIHByaW50KERhdGUubm93KCkgLSBzdGFydCk7Cit9Citmb28oKTsKSW5k
ZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3NwYXJzZS1zZXQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3Mvc3BhcnNlLXNldC5qcwkocmV2aXNpb24gMCkKKysrIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3NwYXJzZS1zZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNSBAQAorKGZ1bmN0aW9uKCkgeworICAgIAorICAgIGZ1bmN0aW9uIGJlbmNoKG5hbWUs
IGYsIGFyZykgeworICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGYoYXJnKTsKKyAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlOworICAgICAgICBjb25z
dCB2ZXJib3NlID0gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJp
bnQobmFtZSArICIgIiArIHJlc3VsdCArICIgIiArIChlbmQtc3RhcnQpICsgIm1zIik7CisgICAg
fQorCisKKyAgICB2YXIgc3BhcnNlU2V0ID0gbmV3IFNldDsKKyAgICBmb3IgKHZhciB4IG9mIFsx
MjMsIDEyMzAsIDEyMzAwLCAxMjMwMDAsIDIzNCwgMjM0MCwgMjM0MDBdKSB7CisgICAgICAgIHNw
YXJzZVNldC5hZGQoeCk7CisgICAgfQorCisgICAgYmVuY2goIlNwYXJzZSBTZXQgUHJvcGVydHkg
RXhpc3RlbmNlIiwgZnVuY3Rpb24ocykgeworICAgICAgICB2YXIgY291bnQgPSAwOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDVlNjsgKytpKQorICAgICAgICAgICAgaWYgKHMuaGFzKGkp
KQorICAgICAgICAgICAgICAgIGNvdW50KysKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0s
IHNwYXJzZVNldCk7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvbWFwLWNzZS1jb3JyZWN0
bmVzcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tYXAtY3NlLWNvcnJlY3RuZXNz
LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvbWFwLWNzZS1jb3JyZWN0bmVzcy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACitmdW5jdGlvbiBhc3NlcnQoYikgewor
ICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0ISIpOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdEhhcyhtYXAsIGtleSwgZikgeworICAg
IGxldCBmaXJzdCA9IG1hcC5oYXMoa2V5KTsKKyAgICBmKCk7CisgICAgbGV0IHNlY29uZCA9IG1h
cC5oYXMoa2V5KTsKKyAgICByZXR1cm4ge2ZpcnN0LCBzZWNvbmR9OworfQorbm9JbmxpbmUodGVz
dEhhcyk7CisKK2Z1bmN0aW9uIHRlc3RHZXQobWFwLCBrZXksIGYpIHsKKyAgICBsZXQgZmlyc3Qg
PSBtYXAuZ2V0KGtleSk7CisgICAgZigpOworICAgIGxldCBzZWNvbmQgPSBtYXAuZ2V0KGtleSk7
CisgICAgcmV0dXJuIHtmaXJzdCwgc2Vjb25kfTsKK30KK25vSW5saW5lKHRlc3RHZXQpOworCitm
dW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQga2V5ID0gaTsKKyAgICAgICAgbWFw
LnNldChrZXksIGtleSk7CisgICAgICAgIGxldCBmID0gKCkgPT4gbWFwLmRlbGV0ZShrZXkpOwor
ICAgICAgICBub0lubGluZShmKTsKKyAgICAgICAgbGV0IHtmaXJzdCwgc2Vjb25kfSA9IHRlc3RI
YXMobWFwLCBrZXksIGYpOworICAgICAgICBhc3NlcnQoZmlyc3QpOworICAgICAgICBhc3NlcnQo
IXNlY29uZCk7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsK
KyAgICAgICAgbGV0IGtleSA9IGk7CisgICAgICAgIG1hcC5zZXQoa2V5LCBrZXkpOworICAgICAg
ICBsZXQgZiA9ICgpID0+IHt9OworICAgICAgICBub0lubGluZShmKTsKKyAgICAgICAgbGV0IHtm
aXJzdCwgc2Vjb25kfSA9IHRlc3RIYXMobWFwLCBrZXksIGYpOworICAgICAgICBhc3NlcnQoZmly
c3QpOworICAgICAgICBhc3NlcnQoc2Vjb25kKTsKKyAgICB9CisKKworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IGtleSA9IGk7CisgICAgICAgIGxl
dCB2YWx1ZSA9IHt9OworICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworICAgICAgICBsZXQg
ZiA9ICgpID0+IG1hcC5kZWxldGUoa2V5KTsKKyAgICAgICAgbm9JbmxpbmUoZik7CisgICAgICAg
IGxldCB7Zmlyc3QsIHNlY29uZH0gPSB0ZXN0R2V0KG1hcCwga2V5LCBmKTsKKyAgICAgICAgYXNz
ZXJ0KGZpcnN0ID09PSB2YWx1ZSk7CisgICAgICAgIGFzc2VydChzZWNvbmQgPT09IHVuZGVmaW5l
ZCk7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAg
ICAgbGV0IGtleSA9IGk7CisgICAgICAgIGxldCB2YWx1ZSA9IHt9OworICAgICAgICBtYXAuc2V0
KGtleSwgdmFsdWUpOworICAgICAgICBsZXQgZiA9ICgpID0+IHt9OworICAgICAgICBub0lubGlu
ZShmKTsKKyAgICAgICAgbGV0IHtmaXJzdCwgc2Vjb25kfSA9IHRlc3RHZXQobWFwLCBrZXksIGYp
OworICAgICAgICBhc3NlcnQoZmlyc3QgPT09IHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0KHNlY29u
ZCA9PT0gdmFsdWUpOworICAgIH0KK30KK2ZvbygpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvbWFw
LWl0ZXJhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tYXAtaXRlcmF0aW9u
LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdGlvbi5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdCEiKTsKK30KK25vSW5s
aW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIHRlc3QxKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFw
OworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaXRlciA9IG1hcFtTeW1ib2wuaXRlcmF0
b3JdKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQo
dmFsdWVbMF0gPT09IDIwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0gPT09IDMwKTsKKyAgICBhc3Nl
cnQoIWRvbmUpOworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2Vy
dChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxKCk7CisKK2Z1bmN0aW9uIHRlc3QyKCkgewor
ICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaXRl
ciA9IG1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVy
Lm5leHQoKTsKKyAgICBhc3NlcnQodmFsdWVbMF0gPT09IDIwKTsKKyAgICBhc3NlcnQodmFsdWVb
MV0gPT09IDMwKTsKKyAgICBhc3NlcnQoIWRvbmUpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKTsKKworICAgIG1hcC5zZXQoNDAsIDUwKTsKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0
ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRl
ZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MigpOwor
CitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0
KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwW1N5bWJv
bC5pdGVyYXRvcl0oKTsKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAg
IGFzc2VydCh2YWx1ZVswXSA9PT0gMjApOworICAgIGFzc2VydCh2YWx1ZVsxXSA9PT0gMzApOwor
ICAgIGFzc2VydCghZG9uZSk7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsK
KyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gNTApOworICAgIGFz
c2VydCh2YWx1ZVsxXSA9PT0gNjApOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworICAg
ICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAg
YXNzZXJ0KHZhbHVlWzBdID09PSAiZm9vIik7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSAiYmFy
Iik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9u
ZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MygpOworCitmdW5jdGlvbiB0ZXN0NCgpIHsKKyAgICBs
ZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwg
NjApOworICAgIGxldCBpdGVyID0gbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBsZXQge3Zh
bHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gMjApOwor
ICAgIGFzc2VydCh2YWx1ZVsxXSA9PT0gMzApOworICAgIGFzc2VydCghZG9uZSk7CisKKyAgICBt
YXAuY2xlYXIoKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFz
c2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3Q0KCk7CisKK2Z1bmN0aW9uIHRlc3Q1KCkg
eworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAu
c2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOworICAg
IGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KHZhbHVlWzBdID09
PSAyMCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNzZXJ0KCFkb25lKTsK
KworICAgIG1hcC5jbGVhcigpOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKworICAgICh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlWzBdID09PSA1MCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSA2MCk7CisKKyAgICAoe3Zh
bHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0
KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykK
KyAgICB0ZXN0NSgpOworIAorZnVuY3Rpb24gdGVzdDYoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBN
YXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIGxldCBpID0gMDsKKyAgICBmb3IgKGxldCBb
a2V5LCB2YWx1ZV0gb2YgbWFwKSB7CisgICAgICAgIG1hcC5kZWxldGUoa2V5KTsKKyAgICAgICAg
bWFwLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgaSsrOworICAgICAgICBpZiAoaSA9PT0gMTAw
MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhc3NlcnQoaSA9PT0gMTAwMCk7Cit9
Cit0ZXN0NigpOworCitmdW5jdGlvbiB0ZXN0NygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsK
KyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbGV0IGkgPSAwOworICAgIGZvciAobGV0IFtrZXks
IHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgbWFwLmNsZWFyKCk7CisgICAgICAgIG1hcC5zZXQo
a2V5LCB2YWx1ZSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgaWYgKGkgPT09IDEwMDApCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgYXNzZXJ0KGkgPT09IDEwMDApOworfQordGVzdDco
KTsKKworZnVuY3Rpb24gdGVzdDgoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFw
LnNldCgyMCwgMzApOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspCisgICAgICAg
IG1hcC5zZXQoaSwgaSk7CisgICAgbGV0IGkgPSAwOworICAgIGZvciAobGV0IFtrZXksIHZhbHVl
XSBvZiBtYXApIHsKKyAgICAgICAgYXNzZXJ0KGtleSA9PT0gdmFsdWUpOworICAgICAgICBpKys7
CisgICAgICAgIGlmIChrZXkgPT09IDI1MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBhc3NlcnQoaSA9PT0gMjUxKTsKK30KK3Rlc3Q4KCk7CisKK2Z1bmN0aW9uIHRlc3Q5KCkgewor
ICAgIGFzc2VydCgxLygtMCkgPT09IC1JbmZpbml0eSk7CisKKyAgICBsZXQgbWFwID0gbmV3IE1h
cDsKKyAgICBtYXAuc2V0KC0wLCA1MCk7IC8vIFdlIHNob3VsZCBub3JtYWxpemUgLTAgdG8gKzAg
aW4gdGhlIGtleS4KKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7CisgICAgICAg
IGFzc2VydCgxL2tleSA9PT0gSW5maW5pdHkpOworICAgIH0KKyAgICBhc3NlcnQobWFwLmdldCgw
LjApID09PSA1MCk7CisgICAgYXNzZXJ0KG1hcC5nZXQoMCkgPT09IDUwKTsKKyAgICBhc3NlcnQo
bWFwLmdldCgtMCkgPT09IDUwKTsKKyAgICBhc3NlcnQobWFwLmdldCgrMCkgPT09IDUwKTsKK30K
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDkoKTsKKworZnVuY3Rpb24g
dGVzdDEwKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoIm5lZ1plcm8i
LCAtMCk7IC8vIFdlIHNob3VsZCAqbm90KiBub3JtYWxpemUgLTAgdG8gKzAgaW4gdGhlIHZhbHVl
LgorICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgYXNzZXJ0KDEv
dmFsdWUgPT09IC1JbmZpbml0eSk7CisgICAgfQorfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7
IGkrKykKKyAgICB0ZXN0MTAoKTsKKworZnVuY3Rpb24gdGVzdDExKCkgeworICAgIGxldCBtYXAg
PSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaXRlciA9IG1hcC5rZXlz
KCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQoIWRv
bmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMjApOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0
KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAobGV0IGkg
PSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDExKCk7CisKK2Z1bmN0aW9uIHRlc3QxMigpIHsK
KyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbGV0IGl0
ZXIgPSBtYXAudmFsdWVzKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsK
KyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMzApOworCisgICAgKHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2Vy
dCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0
KCkpCisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsK
K30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDEyKCk7CisKK2Z1bmN0
aW9uIHRlc3QxMygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAz
MCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwLmtleXMoKTsKKyAg
ICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCghZG9uZSk7Cisg
ICAgYXNzZXJ0KHZhbHVlID09PSAyMCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKyAgICBtYXAuc2V0
KCJmb28iLCAiYmFyIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAg
ICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gImZvbyIpOworCisgICAgKHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0
KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykK
KyAgICB0ZXN0MTMoKTsKKworZnVuY3Rpb24gdGVzdDE0KCkgeworICAgIGxldCBtYXAgPSBuZXcg
TWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0
IGl0ZXIgPSBtYXAudmFsdWVzKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQo
KTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMzApOworCisgICAg
bWFwLmNsZWFyKCk7CisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworCisgICAgOyh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAg
YXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDE0KCk7CisKK2Z1bmN0aW9uIHRlc3Qx
NSgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAg
bWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwLmtleXMoKTsKKworICAgIGxldCB7
dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3Nl
cnQodmFsdWUgPT09IDIwKTsKKworICAgIDsoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQor
ICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSA1MCk7CisKKyAgICBtYXAu
Y2xlYXIoKTsKKworICAgIG1hcC5zZXQoImZvbyIsICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRv
bmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUg
PT09ICJmb28iKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNz
ZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAobGV0
IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDE1KCk7CisKK2Z1bmN0aW9uIHRlc3QxNigp
IHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbWFw
LnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwLnZhbHVlcygpOworCisgICAgbGV0IHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2Vy
dCh2YWx1ZSA9PT0gMzApOworCisgICAgOyh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisg
ICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDYwKTsKKworICAgIG1hcC5j
bGVhcigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9u
ZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9
PT0gImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3Nl
cnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTYoKTsKKworZnVuY3Rpb24gdGVzdDE3KCkg
eworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAu
c2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXAua2V5cygpOworCisgICAgbGV0IHt2YWx1
ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2
YWx1ZSA9PT0gMjApOworCisgICAgOyh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAg
YXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDUwKTsKKworICAgIG1hcC5jbGVh
cigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0g
ImZvbyIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQo
ZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgbWFwLnNldCgi
aGVsbG8iLCAid29ybGQiKTsKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAg
IGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxNygpOworCitmdW5jdGlvbiB0ZXN0
MTgoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAg
IG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcC52YWx1ZXMoKTsKKworICAgIGxl
dCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBh
c3NlcnQodmFsdWUgPT09IDMwKTsKKworICAgIDsoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgp
KQorICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSA2MCk7CisKKyAgICBt
YXAuY2xlYXIoKTsKKworICAgIG1hcC5zZXQoImZvbyIsICJiYXIiKTsKKworICAgICh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAg
YXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKKworICAgIG1h
cC5zZXQoImhlbGxvIiwgIndvcmxkIik7CisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQo
KSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOwor
fQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTgoKTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMDUpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTAxICBTYWFtIEJhcmF0
aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZh
c3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
OTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBF
UzZTYW1wbGVCZW5jaC9jbGkuanM6CisKIDIwMTYtMDgtMjMgIFNhYW0gQmFyYXRpICA8c2JhcmF0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcnVuIEVTNlNhbXBs
ZUJlbmNoIGZyb20gdGhlIGpzYyBzaGVsbApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1w
bGVCZW5jaC9jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVC
ZW5jaC9jbGkuanMJKHJldmlzaW9uIDIwNTMwNSkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2Ft
cGxlQmVuY2gvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0ICszMCw0IEBAIGxvYWQoImFp
cl9iZW5jaG1hcmsuanMiKTsKIGxvYWQoImJhc2ljX2JlbmNobWFyay5qcyIpOwogbG9hZCgiZ2x1
ZS5qcyIpOwogCi1kcml2ZXIuc3RhcnQoMTApOworZHJpdmVyLnN0YXJ0KDQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAwIEBACisyMDE2LTA5
LTAxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgSlNN
YXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZhbXBzIGhvdyB3ZSBpbXBsZW1lbnQgTWFwIGFuZCBT
ZXQuIEl0IHVzZXMKKyAgICAgICAgYSBuZXcgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24uIFRoZSBo
YXNoIG1hcCB1c2VzIGxpbmVhcgorICAgICAgICBwcm9iaW5nIGFuZCBpdCB1c2VzIFdhbmcncyA2
NCBiaXQgaGFzaCBmdW5jdGlvbiBmb3IgSlNWYWx1ZXMKKyAgICAgICAgdGhhdCBhcmVuJ3Qgc3Ry
aW5ncy4gU3RyaW5ncyB1c2UgU3RyaW5nSW1wbCdzIGhhc2ggZnVuY3Rpb24uCisgICAgICAgIFRo
ZSByZWFzb24gSSB3YW50ZWQgdG8gcm9sbCBvdXIgb3duIEhhc2hUYWJsZSBpcyB0d29mb2xkOgor
ICAgICAgICBJIGRpZG4ndCB3YW50IHRvIGlubGluZSBXVEY6Okhhc2hNYXAncyBpbXBsZW1lbnRh
dGlvbiBpbnRvIG91cgorICAgICAgICBKSVQsIHNpbmNlIHRoYXQgc2VlbXMgZXJyb3IgcHJvbmUg
YW5kIHVubWFpbnRhaW5hYmxlLiBBbHNvLCBJIHdhbnRlZAorICAgICAgICBhIGRpZmZlcmVudCBz
dHJ1Y3R1cmUgZm9yIGhhc2ggbWFwIGJ1Y2tldHMgd2hlcmUgYnVja2V0cyBhbHNvIGV4aXN0IGlu
CisgICAgICAgIGEgbGlua2VkIGxpc3QuCisKKyAgICAgICAgVGhlIHJlYXNvbiBmb3IgbWFraW5n
IGJ1Y2tldHMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IGlzIHRoYXQgaXRlcmF0aW9uCisgICAgICAg
IGlzIG5vdyBzaW1wbGUuIEl0ZXJhdGlvbiB3b3JrcyBieSBqdXN0IHRyYXZlcnNpbmcgYSBsaW5r
ZWQgbGlzdC4KKyAgICAgICAgVGhpcyBkZXNpZ24gYWxzbyBhbGxvd3MgZm9yIGEgc2ltcGxlIGlt
cGxlbWVudGF0aW9uIHdoZW4gZG9pbmcgaXRlcmF0aW9uCisgICAgICAgIHdoaWxlIHRoZSBoYXNo
IHRhYmxlIGlzIG11dGF0aW5nLiBXaGVuZXZlciB3ZSByZW1vdmUgYSBidWNrZXQgZnJvbQorICAg
ICAgICB0aGUgaGFzaCB0YWJsZSwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCBtZWFuaW5n
IGl0ZW1zIGluIHRoZQorICAgICAgICBsaXN0IGRvbid0IHBvaW50IHRvIGl0LiBIb3dldmVyLCB0
aGUgcmVtb3ZlZCBidWNrZXQgd2lsbCBzdGlsbCBwb2ludAorICAgICAgICB0byB0aGluZ3MgdGhh
dCBhcmUgZWl0aGVyIGluIHRoZSBsaXN0LCBvciBoYXZlIGFsc28gYmVlbiByZW1vdmVkLgorICAg
ICAgICBlLmcsIGZyb20gYSByZW1vdmVkIGJ1Y2tldCwgeW91IGNhbiBhbHdheXMgZm9sbG93IHBv
aW50ZXJzIHVudGlsIHlvdQorICAgICAgICBlaXRoZXIgZmluZCBhbiBpdGVtIGluIHRoZSBsaXN0
LCBvciB5b3UgZmluZCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgICAgVGhpcyBpcyBhIHJl
YWxseSBuaWNlIHByb3BlcnR5IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBhIE1hcCBvciBTZXQKKyAg
ICAgICAgZG9lcyBub3QgbmVlZCB0byByZWFzb24gYWJvdXQgdGhlIGFsbCB0aGUgaXRlcmF0b3Jz
IHRoYXQgcG9pbnQKKyAgICAgICAgaW50byBpdHMgbGlzdC4gQWxzbywgd2hlbmV2ZXIgd2UgYWRk
IGl0ZW1zIHRvIHRoZSBNYXAgb3IgU2V0LCB3ZQorICAgICAgICBoaWphY2sgdGhlIHRhaWwgYXMg
dGhlIG5ldyBpdGVtLCBhbmQgbWFrZSB0aGUgbmV3IGl0ZW0gcG9pbnQgdG8gYSBuZXdseQorICAg
ICAgICBjcmVhdGVkIHRhaWwuIFRoaXMgbWVhbnMgdGhhdCBhbnkgaXRlcmF0b3IgdGhhdCBwb2lu
dGVkIHRvIHRoZSAidGFpbCIgbm93CisgICAgICAgIHBvaW50cyB0byBub24tdGFpbCBpdGVtcy4g
VGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYWRkaW5nIHRoaW5ncworICAgICAgICB0
byB0aGUgTWFwL1NldCB3aGlsZSBpdGVyYXRpbmcgZWFzeS4KKworICAgICAgICBJIGFsc28gbWFk
ZSBNYXAucHJvdG90eXBlLmdldCwgTWFwLnByb3RvdHlwZS5oYXMsIGFuZCBTZXQucHJvdG90eXBl
LmhhcworICAgICAgICBpbnRvIGludHJpbnNpY3MgaW4gdGhlIERGRy4gVGhlIElSIGNhbiBub3cg
cmVhc29uIGFib3V0IGhhc2ggbWFwCisgICAgICAgIG9wZXJhdGlvbnMgYW5kIGNhbiBldmVuIGRv
IENTRSBvdmVyIFdhbmcncyBoYXNoIGZ1bmN0aW9uLCBoYXNoIG1hcAorICAgICAgICBidWNrZXQg
bG9va3VwcywgaGFzaCBtYXAgYnVja2V0IGxvYWRzLCBhbmQgdGVzdGluZyBpZiBhIGtleSBpcyBp
bgorICAgICAgICB0aGUgaGFzaCB0YWJsZS4gVGhpcyBtYWtlcyBjb2RlIHBhdHRlcm5zIGZvciBN
YXAgbGlrZSBzbywgc3VwZXIgZmFzdAorICAgICAgICBpbiB0aGUgRlRMLCBzaW5jZSB3ZSB3aWxs
IG9ubHkgYmUgZG9pbmcgYSBzaW5nbGUgaGFzaCBhbmQgaGFzaCBidWNrZXQgbG9va3VwOgorCisg
ICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBnZXRLZXlJZlByZXNlbnQobWFwLCBrZXkpIHsK
KyAgICAgICAgCWlmIChtYXAuaGFzKGtleSkpCisgICAgICAgIAkJcmV0dXJuIG1hcC5nZXQoa2V5
KTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKworICAgICAgICBUaGlzIHBhdGNoIGlzIHJvdWdo
bHkgYW4gOCUgc3BlZWR1cCBvbiBFUzZTYW1wbGVCZW5jaC4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgorICAgICAgICAoSlND
OjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW50cmluc2ljQ2FsbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6RWRnZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpERkc6OkVkZ2U6Om1h
a2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0
aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6
OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlw
ZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZH
T3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6
c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2JqZWN0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmNwcDoKKyAg
ICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDoK
KyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpp
c0NlbGwpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAg
ICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29t
cGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hcEhhc2gpOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TWFwQnVja2V0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSXNOb25FbXB0eU1hcEJ1
Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd01hcE9iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1NldE9iamVjdCk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd01hcEJ1Y2tldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZSk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZU1hcE9iamVjdCk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZVNldE9iamVjdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNldE1hcEJ1Y2tldCk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1JlZ0V4cE9iamVjdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1N0b3JhZ2UpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpzcGVjdWxhdGVS
ZWdFeHBPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpzZXRTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0SGFzaCk6Cisg
ICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhl
bHBlcnM6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdCk6IERlbGV0ZWQuCisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBwYXJzZXIvTW9kdWxlQW5hbHl6ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVBbmFseXplcjo6TW9kdWxlQW5hbHl6ZXIpOgorICAg
ICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SGFz
aE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6Okhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRp
bWUvSGFzaE1hcEltcGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNl
bGVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNyZWF0ZVN0cnVj
dHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6Okhhc2hNYXBCdWNrZXQ6Okhhc2hNYXBCdWNrZXQpOgorICAgICAgICAoSlNDOjpIYXNoTWFw
QnVja2V0OjpzZXROZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6c2V0UHJldik6
CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldEtleSk6CisgICAgICAgIChKU0M6Okhh
c2hNYXBCdWNrZXQ6OnNldFZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6a2V5
KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwQnVja2V0OjpuZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6cHJldik6
CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmRlbGV0ZWQpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwQnVja2V0OjpzZXREZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6
b2Zmc2V0T2ZLZXkpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpvZmZzZXRPZlZhbHVl
KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpidWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVm
ZmVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjphcmVLZXlzRXF1YWwpOgorICAgICAgICAoSlND
Ojpub3JtYWxpemVNYXBLZXkpOgorICAgICAgICAoSlNDOjpqc01hcEhhc2gpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6c2VsZWN0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpjcmVh
dGUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6SGFzaE1hcEltcGwpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmVtcHR5VmFsdWUpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNFbXB0eSk6CisgICAgICAgIChKU0M6Okhhc2hN
YXBJbXBsOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNEZWxl
dGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXQpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6Omhhcyk6
CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjphZGQpOgorICAgICAgICAoSlNDOjpIYXNoTWFw
SW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnNpemUpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwSW1wbDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6
YnVmZmVyU2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6b2Zmc2V0T2ZC
dWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6b2Zmc2V0T2ZDYXBhY2l0eSk6Cisg
ICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpoZWFkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcElt
cGw6OnRhaWwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YXBwcm94aW1hdGVTaXplKToK
KyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9y
bWFsaXplZCk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpyZWhhc2gpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6bWFrZUFuZFNldE5ld0J1ZmZlcik6CisgICAgICAgICogcnVudGlt
ZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAg
KiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnNhbWVWYWx1ZSk6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNNYXA6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6
ZXN0aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjp2aXNpdENoaWxk
cmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OmNvcHlCYWNraW5nU3RvcmUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6aGFzKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNNYXA6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6Z2V0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpyZW1vdmUpOiBE
ZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKEpTQzo6SlNNYXA6
OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpKU01hcDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6CisgICAgICAg
IChKU0M6OkpTTWFwOjpKU01hcCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6a2V5KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5Ojp2YWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNNYXA6OkVudHJ5OjpzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTTWFwOjpFbnRyeTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJ
dGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAg
IChKU0M6OkpTTWFwSXRlcmF0b3I6OmNsb25lKToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwSXRl
cmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6YWR2YW5jZUl0ZXIpOgorICAg
ICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVy
YXRvcjo6bmV4dEtleVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6SlNNYXBJ
dGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OnNldEl0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6SlNNYXBJdGVyYXRvcjo6aXRlcmF0b3JEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmg6CisgICAg
ICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNN
b2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaDoKKyAgICAgICAgKEpT
Qzo6SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9KU1NldC5jcHA6
CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZXQ6OmVzdGltYXRlZFNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0Ojpjb3B5QmFja2luZ1N0
b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6Omhhcyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTU2V0OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OmFk
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpjbGVhcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTU2V0OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNT
ZXQuaDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTU2V0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1NldDo6YWRkKToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjprZXkpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1NldDo6RW50cnk6OnNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU1NldDo6RW50cnk6OnNldFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZXQ6OkVudHJ5OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1NldEl0
ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAg
KEpTQzo6SlNTZXRJdGVyYXRvcjo6Y2xvbmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVy
YXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjphZHZhbmNlSXRlcik6CisgICAg
ICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJh
dG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6c2V0SXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpmaW5pc2gpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjppdGVyYXRvckRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9NYXBCYXNlLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6Ok1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+Ojp2aXNpdENo
aWxkcmVuKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT46OmVzdGlt
YXRlZFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQmFzZS5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6TWFwQmFzZTo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6Omhhcyk6CisgICAg
ICAgIChKU0M6Ok1hcEJhc2U6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluZEJ1Y2tldCk6CisgICAgICAgIChKU0M6Ok1h
cEJhc2U6Om9mZnNldE9mSGFzaE1hcEltcGwpOgorICAgICAgICAoSlNDOjpNYXBCYXNlOjppbXBs
KToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpNYXBCYXNlOjpNYXBCYXNlKToKKyAgICAgICAgKiBydW50aW1lL01hcENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAgICAgICAgKiBydW50aW1lL01hcEl0
ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQcm90b3R5cGVG
dW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgorICAgICAgICAo
SlNDOjpNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0TWFw
KToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJc01hcCk6CisgICAgICAgIChKU0M6OnByaXZh
dGVGdW5jTWFwSXRlcmF0b3JOZXh0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHA6CisgICAgICAgIChKU0M6OnNhbWVWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoKKyAgICAgICAgKiBydW50aW1lL1NldENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U2V0KToKKyAgICAgICAgKiBydW50
aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQ
cm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6Z2V0U2V0KToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQpOgor
ICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAg
ICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNi0wOS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6Omluc2VydE9T
UkhpbnRzRm9yVXBkYXRlKCkgZmFpbHMgdG8gZW1pdCB1cGRhdGVkIGhpbnRzIGluIHNvbWUgY2Fz
ZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIwNTMw
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVu
dGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dlbmVyYXRv
clByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKKyAgICBydW50aW1l
L0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKICAgICBydW50aW1l
L0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVkVHlwZS5jcHAKQEAgLTc1Miw2
ICs3NTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRpbWUvTGF6eUNs
YXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAKICAgICBydW50
aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJhc2UuY3BwCiAgICAgcnVudGltZS9NYXBD
b25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAogICAg
IHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAwLDEw
ICsxMzAwLDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MjMzQzI5MUQz
NDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0Nv
ZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAq
LzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2luTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0ODFD
NEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVCMTk5NzFENzhCRTM1MDAyNjJGQTAg
LyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi87IH07CisJCTc5
NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhCRTM1MDAyNjJGQTAgLyogTWFw
QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUg
LyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
Y3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVu
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5
OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUz
NCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMDkw
N0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLzsgfTsKKwkJNzlBMDkwODAx
RDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1h
cEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODMzMUQzNUQ3MUUwMEQ4
RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEyMjgzNjFEMzVENzFGMDBEOEUw
NjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi87
IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUz
MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUzMywxMCArMzUzNywxNCBA
QAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNB
RjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk1
QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJv
bm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdF
MDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0
IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcElt
cGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFzaE1hcEltcGwu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFz
aE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBMjI4MzMxRDM1RDcx
RTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElDRm9yd2FyZHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9yd2FyZHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NzQsNiArNTc4Miw4IEBACiAJCQkJNzk2
NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLywKIAkJCQlCQzAyRTlCODBF
MTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMzN0JERTBFMUFG
MEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJNzlBMDkwN0QxRDc2ODQ2NTAw
OEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJCQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyog
SWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNFIC8qIElkZW50
aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRpZmllcklu
bGluZXMuaCAqLywKQEAgLTU5ODIsNiArNTk5Miw4IEBACiAJCQkJQTdFMkVBNjkwRkI0NjBDRjAw
NjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJCQlGNjkyQTg2ODAyNTU1OTdEMDFGRjYw
RjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1OTdEMDFGRjYwRjcgLyogTG9v
a3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICov
LAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8sCiAJCQkJQTcw
MDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlBNzAw
ODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCAqLywKIAkJCQlBNzg1MDdE
NTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLApAQCAtNzI3MSw2ICs3MjgzLDcgQEAK
IAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0
YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJh
c2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3MUI4NEZCNEEwMDE4MDFGQSAvKiBDYWxs
RnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQjExNEJDRjcxODAwODg1
QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyOUUxNENBN0RD
NTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAgLTc0MzcsNiAr
NzQ1MCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNo
Rm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBCQkI4RTggLyog
REZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5QTA5MDgwMUQ3Njg0NjUwMDhC
ODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUNDODkxOTNBQzYw
QTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOURD
NjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhlYWRlcnMgKi8s
CkBAIC05MTU3LDYgKzkxNzEsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBF
eGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBG
OEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAw
NzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OUEw
OTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnku
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZBQTAwQ0Y2NTY0IC8qIEdQUklu
Zm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNCNjg3IC8qIEZU
TEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIwMSw2ICs5MjE2LDcg
QEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJGRjJCMUFENDc2RTcwMDA4OEY4NyAvKiBG
dW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDQzEwN0VDMzc2
MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNzk1
QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2M0UgLyogR0NB
d2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIlNwZWN1bGF0
ZWRUeXBlLmgiCiAKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
LSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJK
U1NldC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmluZ09i
amVjdC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtMzQ2LDYgKzM0OCwxMiBAQCBT
cGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBpZiAoY2xhc3NJ
bmZvID09IFJlZ0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1JlZ0V4cE9i
amVjdDsKKworICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAgICAgICAgcmV0
dXJuIFNwZWNNYXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0OjppbmZvKCkp
CisgICAgICAgIHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChjbGFzc0luZm8t
PmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3BlY0Z1
bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MSArMzksNDMg
QEAgY2xhc3MgU3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0ZWRUeXBlOwog
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAgICAgPSAwOyAv
LyBXZSBkb24ndCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNGaW5hbE9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQXJyYXkgICAg
ICAgICAgICAgID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0gMXUgPDwgMjsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIEludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUgPDwgNTsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgot
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdSA8
PCA2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNs
YXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFycmF5
ICA9IDF1IDw8IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Vp
bnQxNkFycmF5ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBVaW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdSA8PCAxMTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nl
cy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0g
MXVsbCA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxsIDw8IDE7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0Z1bmN0aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
SlNGdW5jdGlvbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAg
ICAgICAgID0gMXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9yIG9u
ZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50
MTZBcnJheSAgICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MTZB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0ludDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXVsbCA8PCA3
OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0cyBz
dWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJheSAg
ICAgICAgPSAxdWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBvciBv
bmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Vp
bnQzMkFycmF5ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQz
MkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8PCAxMTsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0gU3Bl
Y0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWludDhB
cnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNVaW50
MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8PCAxMjsgLy8g
SXQncyBkZWZpbml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBTdHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Jl
Z0V4cE9iamVjdCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBSZWdFeHBP
YmplY3QgKGFuZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8IDE2OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJheSwg
b3IgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0ICAg
ICAgICAgICAgID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9uIHwg
U3BlY1R5cGVkQXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRBcmd1
bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNPYmplY3RP
dGhlcjsgLy8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3Qg
cHJlZGljdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQg
ICAgICAgID0gMXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQn
cyBhbiBpZGVudGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdW
YXIgICAgICAgICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFu
ZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBE
aXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
Y29wZWRBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTY29w
ZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdPYmplY3QgICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJpbmdP
YmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAg
ICA9IDF1bGwgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5v
dCBhbnkgc3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjTWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQncyBkZWZpbml0
ZWx5IE1hcCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwgPDwgMTc7IC8v
IEl0J3MgZGVmaW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhN
RSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9
IDF1bGwgPDwgMTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFs
T2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkg
fCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRz
IHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2Jq
ZWN0IHwgU3BlY01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7IC8v
IEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRpY3Rp
b24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAgICA9
IDF1bGwgPDwgMTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBhbiBp
ZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIgICAg
ICAgICAgPSAxdWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0
J3Mgbm90IGFuIGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0
cmluZyAgICAgICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdWYXI7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNTeW1ib2wgICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgU3lt
Ym9sLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAgICAgICAg
PSAxdSA8PCAyMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFz
cyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4g
RklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9w
LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1bGwgPDwgMjE7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBu
b3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQg
b2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGwg
ICAgICAgICAgICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8IFNw
ZWNDZWxsT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxsIDw8IDIzOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwgPDwgMjQ7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgog
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAgICAgPSBTcGVj
Qm9vbEludDMyIHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMy
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAx
dSA8PCAyMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8g
dW5ib3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8PCAyNTsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQuIEl0
J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNwZWNJbnQ1Mk9u
bHk7IC8vIEl0J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50IGFyaXRobWV0
aWMgb24uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFzRG91YmxlICAg
ICA9IDF1IDw8IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRl
IGEgZG91YmxlLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJs
ZSAgICAgPSAxdSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1MiBidXQgaXQn
cyBhIHJlYWwgbnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3OyAvLyBJdCdz
IGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5kIGl0J3Mg
YSBkb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVJlYWwgICAg
ICAgICA9IFNwZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBO
YU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgTmFOIHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxsIDw8IDI4OyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdWxs
IDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUgdG8gdGFnIChp
LmUuIGltcHVyZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZU5hTiAg
ICAgICAgICA9IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5hTjsgLy8gSXQn
cyBkZWZpbml0ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0J5dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZVB1
cmVOYU47IC8vIEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUsIGJ1dCBpdCdz
IGRlZmluaXRlbHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0Z1bGxEb3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZU5hTjsg
Ly8gSXQncyBlaXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgxLDEyICs4Mywx
MiBAQCBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNBbnlJbnQgfCBT
cGVjRG91YmxlUmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGVSZWFsLCBv
ciBhIEludDUyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJl
ciAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJdCdzIGVpdGhl
ciBhbiBJbnQzMiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGltcHVy
ZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAg
ICA9IFNwZWNBbnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIs
IEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4uCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICA9IDF1IDw8
IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQncyBkZWZpbml0
ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgQm9vbGVhbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAgICAg
ICAgICAgID0gMXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVu
ZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAgICAg
ICAgID0gU3BlY0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRoZXIg
YSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVjb2RlTnVtYmVy
IHwgU3BlY01pc2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNw
ZWNJbnQ1Mk9ubHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9s
IHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5vbi1PYmplY3Qg
SlNWYWx1ZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAg
ICAgID0gMXUgPDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIu
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDF1
bGwgPDwgMzI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCiBzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IFNwZWNIZWFw
VG9wIHwgU3BlY0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZv
ciBTcGVjSW50NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNwb25kcyB0byB3
aGF0IGNvdWxkIGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29kZVRvcCB8IFNw
ZWNGdWxsTnVtYmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29kZSBjb3VsZCBz
ZWUgcGx1cyBleG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYgKzk3
NywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwor
ICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwogICAgIGNhc2UgSXNFbXB0eToK
ICAgICBjYXNlIElzSlNBcnJheToKICAgICBjYXNlIElzVW5kZWZpbmVkOgpAQCAtMjg4Myw3ICsy
ODk5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVuc2lnbmVkIGluZGV4
SW5CbG9jaykKIHsKICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5hdChpbmRleElu
QmxvY2spOwotICAgIAorCiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRnZXMo
bm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwzNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNpYzog
eworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAgTm9k
ZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0
KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgx
LCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBI
YXNoLCBrZXkpOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tl
dCwgRWRnZShtYXAsIE1hcE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNoKSk7CisgICAg
ICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgT3BJbmZv
KCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxSZWdp
c3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgY2FzZSBKU1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFwSGFzSW50cmlu
c2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAg
ICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCByZWdp
c3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVyRm9y
QXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFkZFRv
R3JhcGgoTWFwSGFzaCwga2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmluc2lj
ID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOworICAg
ICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJbmZvKDApLCBF
ZGdlKG1hcE9yU2V0LCB1c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAgICAg
Tm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBidWNrZXQpOwor
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYgKzEyNDMsMjcgQEAgdm9pZCBj
bG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9nU2hhZG93Q2hp
Y2tlblRhaWw6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsKKwor
ICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFkKE1pc2NGaWVs
ZHMpOworICAgICAgICBFZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAgIEVk
Z2UmIGtleUVkZ2UgPSBub2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihN
YXBCdWNrZXRMb2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGtleUVkZ2UpLCBMYXp5Tm9kZShub2Rl
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0
OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIGJ1Y2tldEVkZ2Ug
PSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEdldExvYywg
TWlzY0ZpZWxkcywgYnVja2V0RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgIHJlYWQoTWlz
Y0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTWFwSGFzTG9jLCBNaXNjRmllbGRz
LCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJ
KHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSwxMCBAQCBib29sIGRvZXNHQyhHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2FzZSBD
aGVja1dhdGNoZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CisgICAgY2Fz
ZSBNYXBIYXNoOgorICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21KU01h
cEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAgICAgY2FzZSBVbnJlYWNo
YWJsZToKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgIGNhc2UgQ2hlY2tUaWVy
VXBJbkxvb3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNpb24g
MjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBBZGph
Y2VuY3lMaXN0OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RhdGljIHVpbnQzMl90
IHNoaWZ0KCkgeyByZXR1cm4gNzsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qgc2hp
ZnQoKSB7IHJldHVybiA4OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29yZChO
b2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBLaWxs
U3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewpAQCAtMTk3LDggKzE5NywyMSBAQCBwcml2YXRlOgog
ICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
bm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4gc2hpZnQo
KSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NFUlQodXNl
S2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VSVCgoc3Rh
dGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRpY19jYXN0PHVp
bnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVlIHwg
KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChr
aWxsU3RhdHVzKSA8PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjppc1Byb3ZlZChw
cm9vZlN0YXR1cykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KChzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KExhc3RVc2VLaW5kKSA8PCAyKSA8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8IHNo
aWZ0KCkpLCAiV2UgcmVseSBvbiB0aGlzIGJlaW5nIHRydWUgdG8gbm90IGNsb2JiZXIgdGhlIG5v
ZGUgcG9pbnRlci4iKTsKKyAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHNoaWZ0ZWRWYWx1ZSB8
IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tpbGwo
a2lsbFN0YXR1cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92ZWQo
cHJvb2ZTdGF0dXMpKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAg
ICAgIHVuaW9uIFUgeworICAgICAgICAgICAgICAgIFUoKSB7IHdvcmQgPSAwOyB9CisgICAgICAg
ICAgICAgICAgdWludHB0cl90IHdvcmQ7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlOworICAg
ICAgICAgICAgfSB1OworICAgICAgICAgICAgdS53b3JkID0gcmVzdWx0OworICAgICAgICAgICAg
QVNTRVJUKHUuZWRnZS51c2VLaW5kVW5jaGVja2VkKCkgPT0gdXNlS2luZCk7CisgICAgICAgICAg
ICBBU1NFUlQodS5lZGdlLm5vZGUoKSA9PSBub2RlKTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVk
Z2UucHJvb2ZTdGF0dXNVbmNoZWNrZWQoKSA9PSBwcm9vZlN0YXR1cyk7CisgICAgICAgICAgICBB
U1NFUlQodS5lZGdlLmtpbGxTdGF0dXNVbmNoZWNrZWQoKSA9PSBraWxsU3RhdHVzKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICNlbHNlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDIw
NTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1NDUsNiArMTU0NSwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8TWFwT2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2JqZWN0VXNlKQor
ICAgICAgICAgICAgICAgIGZpeEVkZ2U8U2V0T2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQyKCkpOwor
ICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAg
ICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgICAgIGZp
eEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIE1hcEhhc2g6CisgICAgICAgICAgICBmaXhFZGdlPFVudHlwZWRVc2U+
KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJlIHRo
YXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAgICAg
ICAgY2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYg
KzE0MywxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAgICAg
Y2FzZSBSZWdFeHBPYmplY3RMYXN0SW5kZXhMb2M6CiAgICAgICAgIG91dC5wcmludCgiUmVnRXhw
T2JqZWN0TGFzdEluZGV4TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hcEJ1Y2tl
dExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNYXBCdWNrZXRMb2MiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNNYXBHZXRMb2Mi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwSGFzTG9jOgorICAgICAgICBvdXQucHJp
bnQoIk1hcEhhc0xvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4
LDEwIEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlwZWRB
cnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2MsCi0gICAgU3RhY2tQYXlsb2FkTG9jCisg
ICAgU3RhY2tQYXlsb2FkTG9jLAorICAgIE1hcEJ1Y2tldExvYywKKyAgICBKU01hcEdldExvYywK
KyAgICBNYXBIYXNMb2MKIH07CiAKIGNsYXNzIEhlYXBMb2NhdGlvbiB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MTksNiArMTQxOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgICAgICBjYXNlIFN0
cmluZ1JlcGxhY2VSZWdFeHA6CiAgICAgICAgIGNhc2UgVG9OdW1iZXI6CisgICAgICAgIGNhc2Ug
TG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODgsNyArMzg4
LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRQcm9w
ZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBt
YWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
UmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBOb2RlTXVz
dEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9k
ZVJlc3VsdEpTKQorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAorICAg
IC8qIEhhc2hpbmcgbm9kZXMgZm9yIEpTTWFwIGFuZCBKU1NldCAqLyBcCisgICAgbWFjcm8oTWFw
SGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oR2V0TWFwQnVja2V0LCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwK
KyAgICBtYWNybyhJc05vbkVtcHR5TWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogCiAv
LyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZvciBh
bGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0gdG8g
ZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2lu
Y2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRl
ICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0xODAzLDYgKzE4
MDUsMzQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYQogICAgIHNj
b3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNv
ZGUodmFsdWUpLCBzbG90KTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1h
cEhhc2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sKKyAgICBWTSYg
dm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBl
eGVjKTsKKworICAgIHJldHVybiBqc01hcEhhc2goZXhlYywgdm0sIG5vcm1hbGl6ZU1hcEtleShK
U1ZhbHVlOjpkZWNvZGUoaW5wdXQpKSk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVy
YXRpb25KU01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2Rl
ZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
KyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNNYXA6
OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGV4
ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKK0pTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0Nl
bGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhl
Yyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNTZXQqPihtYXAp
LT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsKKyAgICBpZiAo
IWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9
CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5v
dyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpCiB7CiAgICAgLy8gSXQn
cyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3
YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDEwIEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmluZ0ltcGwqIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsK
IEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhF
eGVjU3RhdGUqLCBpbnQzMl90KTsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1h
cEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNT
ZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90
KTsKKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVj
U3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzExLDYgKzcxMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0
R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAg
ICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVj
a2V0OgogICAgICAgICBjYXNlIFRvTnVtYmVyOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9u
KG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC03NDEsNiArNzQyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24o
U3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRNYXBC
dWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAg
ICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisKICAg
ICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNw
ZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAg
ICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToK
KyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgog
ICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nSWRlbnRV
c2U6CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMzU1LDYgKzM1NywxMCBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXREeW5hbWljVmFy
OgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAgICBjYXNlIFJlc29sdmVTY29wZToKKyAgICBj
YXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHU2xv
d1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRl
ICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgogI2luY2x1ZGUgIkpT
RW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgpAQCAtNDcyMCw2ICs0NzIxLDgy
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCisgICAgY2FzZSBNYXBIYXNoOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBKU1ZhbHVlUmVncyBpbnB1
dFJlZ3MgPSBpbnB1dC5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgaW5wdXRSZWdzKTsKKyAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6IHsKKyAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
SlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3Vs
YXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIG1hcEdQUiA9
IG1hcC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mga2V5UmVncyA9IGtleS5qc1ZhbHVlUmVn
cygpOworICAgICAgICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmpl
Y3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVTZXRP
YmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMo
KTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2Up
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVz
dWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBt
YXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygp
OworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJU
ZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dFRhZyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7Cisg
ICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisKKyAgICAgICAg
YXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+
OjpvZmZzZXRPZlZhbHVlKCkpLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxv
YWRHUFIpKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIG5v
dEJ1Y2tldC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2Fk
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgiCiAjaW5jbHVk
ZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUg
IkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVk
ZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNp
bmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKQEAgLTQ2MTUsNiArNDYxNywxNjggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAKKyAgICBjYXNlIE1hcEhhc2g6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgaW5wdXQo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgaW5w
dXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIGlzTm90Q2VsbCA9IG1faml0LmJyYW5j
aElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBz
bG93UGF0aDsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpT
Q2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsK
KyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhpbnB1dEdQUiwg
SlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlc3VsdEdQUik7CisgICAgICAgIHNsb3dQYXRo
LmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRH
UFIpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3Vs
dEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1f
aml0LnVyc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDYpLCByZXN1bHRHUFIp
OworICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgp
KTsKKworICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICBzdHJhaWdodEhh
c2guYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSk7CisgICAgICAgIHN0
cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhpbnB1dEdQ
UikpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAg
c3RyYWlnaHRIYXNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShpbnB1dEdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuV2FuZ3NJbnQ2NEhhc2gocmVzdWx0R1BSLCB0ZW1w
R1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBzbG93
UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwgcmVzdWx0R1BS
LCBpbnB1dEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsK
KyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25lLmxpbmsoJm1f
aml0KTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGtleSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3Bl
cmFuZCBoYXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IG1h
c2sodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IGJ1ZmZlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1Y2tldCh0aGlz
KTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcg
aGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBtYXNrR1BSID0gbWFzay5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGlu
ZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWZmZXJHUFIgPSBidWZmZXIu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7CisgICAgICAg
IEdQUlJlZyBrZXlHUFIgPSBrZXkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBN
YXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9kZS0+Y2hpbGQx
KCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qobm9kZS0+Y2hp
bGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtYXBHUFIsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2Ug
PyBKU01hcDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpIDogSlNTZXQ6Om9mZnNldE9mSGFzaE1hcElt
cGwoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXk+Pjo6b2Zmc2V0T2ZDYXBhY2l0eSgpKSwgbWFza0dQUik7CisgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNoTWFwSW1wbDxI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVmZmVyKCkpLCBi
dWZmZXJHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSksIG1hc2tHUFIp
OworICAgICAgICBtX2ppdC5tb3ZlKGhhc2hHUFIsIGluZGV4R1BSKTsKKworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2xvd1BhdGhDYXNlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGxvb3BBcm91
bmQ7CisKKyAgICAgICAgbV9qaXQuYW5kMzIobWFza0dQUiwgaW5kZXhHUFIpOworICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyR1BSLCBpbmRleEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBidWNrZXRHUFIpOworICAgICAgICBtX2pp
dC5tb3ZlKGJ1Y2tldEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBub3RQcmVzZW50SW5U
YWJsZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAg
ICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSk7CisgICAgICAgIGxvb3BBcm91bmQu
YXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAorICAgICAgICAg
ICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkpKSk7CisKKyAgICAgICAgbV9qaXQu
bG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSGFzaE1hcEJ1Y2tldDxI
YXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkpLCBidWNrZXRHUFIpOworCisgICAg
ICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJh
bmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRHUFIsIGtleUdQUikpOyAvLyBUaGV5
J3JlIGRlZmluaXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdlIGZvdW5kIHRoZSBidWNrZXQgd2Ugd2Vy
ZSBsb29raW5nIGZvciEKKyAgICAgICAgYXV0byBvbmVJc250Q2VsbCA9IG1faml0LmJyYW5jaElm
Tm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKTsKKyAgICAgICAgLy8gZmlyc3QgaXMgYSBj
ZWxsIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90Q2Vs
bChKU1ZhbHVlUmVncyhrZXlHUFIpKSk7CisgICAgICAgIC8vIEJvdGggYXJlIGNlbGxzIGhlcmUu
CisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBKU0Nl
bGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5cGUpKSk7Cisg
ICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZyBoZXJlLgorICAgICAgICBzbG93UGF0aENh
c2VzLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwKKyAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGtleUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAvLyBUaGUgZmlyc3QgaXMg
YSBzdHJpbmcsIGJ1dCB0aGUgc2Vjb25kIGlzIG5vdCwgd2UgY29udGludWUgdG8gbG9vcCBhcm91
bmQuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAg
b25lSXNudENlbGwubGluaygmbV9qaXQpOworICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGRvbmUg
YSA2NC1iaXQgY29tcGFyZSBhdCB0aGlzIHBvaW50LCBzbyBpZiBvbmUgaXMgbm90IGEgbnVtYmVy
LCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVxdWFsLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVu
ZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihidWNrZXRHUFIpKTsKKyAgICAgICAgbG9vcEFyb3Vu
ZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoa2V5R1BSKSk7CisgICAgICAgIC8vIEJv
dGggYXJlIGRlZmluaXRlbHkgbnVtYmVycy4gSWYgd2Ugc2VlIGEgZG91YmxlLCB3ZSBnbyB0byB0
aGUgc2xvdyBwYXRoLgorICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdEludDMyKGJ1Y2tldEdQUikpOworICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdEludDMyKGtleUdQUikpOworICAgICAgICAKKyAgICAgICAgbG9vcEFyb3Vu
ZC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgaW5k
ZXhHUFIpOworICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3AsICZtX2ppdCk7CisKKyAg
ICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpT
TWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQUik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNTZXRGaW5kQnVj
a2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNr
KCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgbm90UHJl
c2VudEluVGFibGUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW1Q
dHIobnVsbHB0ciksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAg
ICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
YXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojpv
ZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUgPSBtX2ppdC5q
dW1wKCk7CisKKyAgICAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3By
KCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAg
bV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1Y2tldEdQUiwgVHJ1
c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0z
MihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRH
UFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisK
ICAgICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBSZXVz
ZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzgxLDYgKzcz
ODEsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlUmVnRXhwT2JqZQogICAgIHNw
ZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKIH0KIAordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSwgR1BSUmVnIGNlbGwpCit7
CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3BlY01hcE9iamVjdCwgSlNNYXBU
eXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2Ug
ZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNYXBPYmplY3QpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVyYW5kKHRoaXMs
IGVkZ2UpOworICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKK30K
Kwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSwgR1BS
UmVnIGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3BlY1NldE9i
amVjdCwgSlNTZXRUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0
T2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNT
ZXRPYmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBv
cGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBvcGVyYW5k
LmdwcigpKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2JqZWN0T3JPdGhl
cihFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjT2JqZWN0
IHwgU3BlY090aGVyKSkKQEAgLTc2NjgsNiArNzY5NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CiAgICAgICAg
IHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBN
YXBPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVj
dChlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAg
ICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOwogICAgICAgICBicmVhazsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5MSw2ICsxMjkxLDEyIEBAIHB1YmxpYzoKIAogI2lm
IFVTRShKU1ZBTFVFNjQpCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENf
SklUT3BlcmF0aW9uX0VDSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwg
R1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAgSklUQ29t
cGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMgb3BlcmF0aW9u
LCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIs
IFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIuZ3ByKCksIG1hdGhJQyk7CkBAIC0xNjcx
LDYgKzE2NzcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRp
b24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRP
cGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKKyAgICB7
CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKKyAgICAg
ICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0K
KwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUpa
WiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25lZCBhcmcyLCB1
bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhl
Y1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFyZzMpKTsKQEAg
LTE3MTksNiArMTczMSwxOCBAQCBwdWJsaWM6CiAgICAgfQogI2Vsc2UgLy8gVVNFKEpTVkFMVUUz
Ml82NCkKIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRp
b25fRUNKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBKU1ZhbHVlUmVn
cyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSwgYXJn
Myk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0
KTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3Bl
cmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSkKKyAg
ICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklU
X0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSk7CisgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBv
cGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJl
Z3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJnMS5wYXlsb2Fk
R1BSKCksIGFyZzEudGFnR1BSKCksIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBt
YXRoSUMpOwpAQCAtMjY1Niw2ICsyNjgwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNwZWN1bGF0
ZUZpbmFsT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KEVkZ2Us
IEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChFZGdlKTsKKyAg
ICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9i
amVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRn
ZSk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSwgR1BSUmVnIGNlbGwpOwogICAg
IHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZVN0
cmluZyhFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZ0lk
ZW50QW5kTG9hZFN0b3JhZ2UoRWRnZSBlZGdlLCBHUFJSZWcgc3RyaW5nLCBHUFJSZWcgc3RvcmFn
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDEyIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgb3V0
LnByaW50KCJSZWdFeHBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwT2Jq
ZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk1hcE9iamVjdFVzZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIG91dC5wcmludCgiU2V0T2JqZWN0
VXNlIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAg
ICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOwogICAgICAgICByZXR1cm47CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMjA1MzA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYzLDYgKzYzLDggQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93blN0cmluZ1VzZSwKICAgICBL
bm93blByaW1pdGl2ZVVzZSwgLy8gVGhpcyBiaXphcnJlIHR5cGUgYXJpc2VzIGZvciBvcF9zdHJj
YXQsIHdoaWNoIGhhcyBhIGJ5dGVjb2RlIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgb25seSBzZWUg
cHJpbWl0aXZlcyAoaS5lLiBub3Qgb2JqZWN0cykuCiAgICAgU3ltYm9sVXNlLAorICAgIE1hcE9i
amVjdFVzZSwKKyAgICBTZXRPYmplY3RVc2UsCiAgICAgU3RyaW5nT2JqZWN0VXNlLAogICAgIFN0
cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5vdFN0cmluZ1ZhclVzZSwKQEAgLTEzNCw2ICsx
MzYsMTAgQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNlSwogICAgICAg
ICByZXR1cm4gU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdDsKICAgICBjYXNlIFN5bWJvbFVzZToK
ICAgICAgICAgcmV0dXJuIFNwZWNTeW1ib2w7CisgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjTWFwT2JqZWN0OworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAg
ICByZXR1cm4gU3BlY1NldE9iamVjdDsKICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAgICAg
ICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVj
dFVzZToKQEAgLTIyMSw2ICsyMjcsOCBAQCBpbmxpbmUgYm9vbCBpc0NlbGwoVXNlS2luZCBraW5k
KQogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAgIGNh
c2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAg
Y2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
QWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5o
IgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkluZGV4aW5nVHlwZS5o
IgorI2luY2x1ZGUgIkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC0xMDIsNyArMTA0LDEzIEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZvLCBTdHJ1Y3R1
cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2dsb2JhbE9iamVj
dCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVy
ZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwKLSAgICBtYWNybyhT
dHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZzZXQoKSkKKyAg
ICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZz
ZXQoKSkgXAorICAgIG1hY3JvKEpTTWFwX2hhc2hNYXBJbXBsLCBKU01hcDo6b2Zmc2V0T2ZIYXNo
TWFwSW1wbCgpKSBcCisgICAgbWFjcm8oSlNTZXRfaGFzaE1hcEltcGwsIEpTU2V0OjpvZmZzZXRP
Zkhhc2hNYXBJbXBsKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9jYXBhY2l0eSwgSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkNhcGFj
aXR5KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9idWZmZXIsICBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVmZmVyKCkpIFwKKyAg
ICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0
X2tleSwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZL
ZXkoKSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVBUChtYWNybykg
XAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1bWVudHM6OnN0
b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMjA1MzA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2Fu
Q29tcGlsZShOb2RlKiAKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgY2FzZSBV
bnJlYWNoYWJsZToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAg
Y2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNh
c2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1Vu
ZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTQzNyw2ICs0NDEsOCBAQCBDYXBhYmls
aXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBT
dHJpbmdPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVj
dFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAgICAgICAgICBj
YXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKICAg
ICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2Ug
UmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTm90Q2VsbFVzZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0Iz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhp
Y2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk9wZXJhbmRz
SW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjb3Bl
ZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAgIGNvbXBpbGVN
YXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6
CisgICAgICAgICAgICBjb21waWxlR2V0TWFwQnVja2V0KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAgY29tcGlsZUxv
YWRGcm9tSlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElz
Tm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tl
dCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAg
ICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjM1MSw2ICs2
MzY0LDIyOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwg
bm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZvaWQgY29tcGlsZU1h
cEhhc2goKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRIYXNoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgbm9uRW1wdHlTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBtX291
dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5j
aGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsKSk7CisKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0
cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVhbChtX291dC5s
b2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwgbV9vdXQu
Y29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbm9uRW1wdHlTdHJpbmdD
YXNlKTsKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHZhbHVlLCBt
X2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAg
ICAgbV9vdXQuZXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIoMCkpLCByYXJlbHko
c2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5U3RyaW5nQ2FzZSkpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vbkVtcHR5U3RyaW5nQ2FzZSwgbm90Q2VsbCk7CisgICAgICAgIExWYWx1ZSBo
YXNoID0gbV9vdXQubFNocihtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJ
bXBsX2hhc2hBbmRGbGFncyksIG1fb3V0LmNvbnN0SW50MzIoNikpOworICAgICAgICBWYWx1ZUZy
b21CbG9jayBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQgPSBtX291dC5hbmNob3IoaGFzaCk7Cisg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoLCBtX291dC5jb25zdEludDMyKDAp
KSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29udGludWF0aW9uKSk7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwgaXNOdW1iZXJDYXNlKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUpLCB1bnN1cmUoaXNO
dW1iZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShzdHJhaWdodEhhc2gpLCB1bnN1cmUo
c2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJhaWdodEhhc2gsIHNsb3dD
YXNlKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAgTFZhbHVlIGtl
eSA9IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1f
b3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7CisgICAgICAgIHRlbXAgPSBtX291
dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAg
ICAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAg
IHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjIpKTsKKyAgICAgICAg
a2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8
PCAxMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVt
cCwgbV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRl
bXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5
IF49IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291
dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOworICAgICAgICBrZXkgPSBtX291dC5i
aXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7CisgICAgICAg
IHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJ
bnQzMigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAgICAgICAv
LyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAg
PSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTUpKTsKKyAgICAgICAga2V5ID0g
bV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8PCAyNyk7
CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9v
dXQuY29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRlbXApOwor
ICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChr
ZXkgPj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNo
cih0ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhv
cihrZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5jYXN0VG9JbnQzMihrZXkpOworCisg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Ioa2V5KTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsKEludDMyLCBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uTWFwSGFzaCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOworICAgICAgICBt
X291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGlu
dWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShJbnQzMiwgZmFz
dFJlc3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0KSk7CisgICAgfQor
CisgICAgdm9pZCBjb21waWxlR2V0TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIAorICAgICAg
ICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFz
aWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RQ
cmVzZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5v
dEVtcHR5VmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RE
ZWxldGVkVmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RC
aXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtl
eU5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRL
ZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJl
Q2VsbHMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJ
c1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtl
eUlzTnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYm90aEFy
ZU51bWJlcnMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRL
ZXlJc0ludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgbWFwOworICAgICAg
ICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAg
ICAgICAgbWFwID0gbG93TWFwT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBlbHNl
IGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAg
ICAgICBtYXAgPSBsb3dTZXRPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgTFZh
bHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIExWYWx1ZSBo
YXNoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgTFZhbHVlIGhhc2hN
YXBJbXBsID0gbV9vdXQubG9hZFB0cihtYXAsIG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09
IE1hcE9iamVjdFVzZSA/IG1faGVhcHMuSlNNYXBfaGFzaE1hcEltcGwgOiBtX2hlYXBzLkpTU2V0
X2hhc2hNYXBJbXBsKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0LmxvYWRQdHIoaGFz
aE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfYnVmZmVyKTsKKyAgICAgICAgTFZhbHVlIG1h
c2sgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKGhhc2hNYXBJbXBsLCBtX2hlYXBzLkhhc2hNYXBJ
bXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaGFzaCk7CisgICAgICAgIG1fb3V0Lmp1bXAobG9v
cFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB1bm1hc2tlZEluZGV4
ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0g
bV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOworICAgICAgICBMVmFsdWUgaGFzaE1h
cEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVz
LmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBTY2Fs
ZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhh
c2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1
cmUobm90UHJlc2VudEluVGFibGUpLCB1bnN1cmUobm90RW1wdHlWYWx1ZSkpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5vdERlbGV0ZWRWYWx1ZSk7CisgICAgICAg
IG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291dC5jb25zdEludFB0
cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmRlbGV0
ZWRWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShub3RE
ZWxldGVkVmFsdWUpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3REZWxldGVkVmFsdWUs
IG5vdEJpdEVxdWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1Y2tldEtleSA9IG1fb3V0LmxvYWQ2NCho
YXNoTWFwQnVja2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNrZXRfa2V5KTsKKyAgICAgICAgLy8gUGVy
Zm9ybSBPYmplY3QuaXMoKQorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoa2V5LCBi
dWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RC
aXRFcXVhbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVxdWFsLCBidWNrZXRL
ZXlJc0NlbGwpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtleSksCisgICAg
ICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwgdW5zdXJlKGJ1Y2tldEtleU5vdENlbGwp
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGwsIGJvdGhBcmVDZWxs
cyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoa2V5KSwKKyAgICAgICAgICAgIHVuc3Vy
ZShib3RoQXJlQ2VsbHMpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOworICAgICAgICBtX291dC5i
cmFuY2goaXNTdHJpbmcoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShidWNrZXRLZXlJ
c1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
YnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENlbGwpOworICAgICAgICBtX291dC5icmFu
Y2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShs
b29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5Tm90Q2VsbCwg
YnVja2V0S2V5SXNOdW1iZXIpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1iZXIoYnVj
a2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKGJ1Y2tldEtl
eUlzTnVtYmVyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNOdW1iZXIs
IGJvdGhBcmVOdW1iZXJzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TnVtYmVyKGtleSks
CisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShib3RoQXJlTnVtYmVycykp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVOdW1iZXJzLCBidWNrZXRLZXlJc0lu
dDMyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYnVja2V0S2V5KSwKKyAgICAg
ICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShidWNrZXRLZXlJc0ludDMyKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJbnQzMiwgbG9vcEFyb3VuZCk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGtleSksCisgICAgICAgICAgICB1bnN1cmUoc2xv
d1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxv
b3BBcm91bmQsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaSh1bm1h
c2tlZEluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291dC5pbnQzMk9uZSkp
KTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLAorICAg
ICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1h
cE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlvbkpTU2V0Rmlu
ZEJ1Y2tldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSwgaGFzaCkpOworICAgICAgICBtX291dC5q
dW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90UHJlc2VudElu
VGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFByZXNlbnRS
ZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5waGkocG9pbnRlclR5
cGUoKSwgYnVja2V0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJlc3VsdCkpOwor
ICAgIH0KKworICAgIHZvaWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQorICAgIHsKKyAg
ICAgICAgTFZhbHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNoaWxkMSgpKTsK
KworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygpOworCisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoMCkpLAor
ICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNrZXQpKTsKKwor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0J1Y2tldCwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF92
YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUo
bV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7CisgICAgfQor
CisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBM
VmFsdWUgYnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0LCBtX291dC5jb25zdEludFB0cigw
KSk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBp
bGVJc09iamVjdE9yTnVsbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwpAQCAtOTkyOCw2ICsxMDE2MywyMCBAQCBwcml2YXRlOgogICAgICAgICBzcGVjdWxhdGVSZWdF
eHBPYmplY3QoZWRnZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisK
KyAgICBMVmFsdWUgbG93TWFwT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRn
ZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBMVmFsdWUg
bG93U2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBs
b3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwgcmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvd1N0cmlu
ZyhFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJh
bmRTcGVjdWxhdGlvbikKICAgICB7CkBAIC0xMDA1MSw2ICsxMDMwMCwxNyBAQCBwcml2YXRlOgog
ICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KKworICAgIExWYWx1ZSBsb3dNYXBCdWNrZXQoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fbWFwQnVja2V0VmFsdWVzLmdl
dChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBzdHJpY3RJ
bnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpAQCAtMTAzNTQsNiAr
MTA2MTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CiAgICAg
ICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmpl
Y3QoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRPYmplY3RVc2U6
CisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSk7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmco
ZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjgyLDYgKzEwOTQ4LDI4IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgbG93Q2VsbChl
ZGdlKSk7CiAgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSBlZGdlLCBM
VmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAg
anNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjTWFwT2JqZWN0LCBpc05vdFR5cGUoY2VsbCwg
SlNNYXBUeXBlKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRn
ZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSwgTFZh
bHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1NldE9iamVjdCwgaXNOb3RUeXBlKGNlbGwsIEpT
U2V0VHlwZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2Up
KTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBMVmFs
dWUgY2VsbCkKICAgICB7CkBAIC0xMTQ1MCw2ICsxMTczOCwxMCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVl
LCBtX2hpZ2hCbG9jaykpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChOb2RlKiBub2Rl
LCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21hcEJ1Y2tldFZhbHVlcy5zZXQobm9k
ZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CiAgICAgdm9p
ZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgbV9k
b3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2Nr
KSk7CkBAIC0xMTQ4Myw2ICsxMTc3NSwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc2V0
U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBCdWNrZXQoTFZh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fbm9kZSwgdmFsdWUpOwor
ICAgIH0KICAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBz
ZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CkBAIC0xMTY2Niw2ICsxMTk2Miw3IEBAIHByaXZhdGU6
CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwog
ICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKICAg
ICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAg
SGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9tYXBCdWNrZXRWYWx1ZXM7CiAgICAg
SGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CiAgICAgCiAg
ICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIEIzIGZyb20gaGF2aW5n
IHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjI2LDYgKzYyNiw1MiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJW
aXJ0dWFsQ2FsCiAgICAgICAgIH0pOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJl
ZyBzY3JhdGNoKQoreworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0OworICAgIC8v
IGtleSArPSB+KGtleSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7Cisg
ICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAg
ICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwg
c2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtl
eSA8PCAxMyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3Rl
ZEltbTMyKDEzKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2Ny
YXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1vdmUoaW5wdXQs
IHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0Y2gpOworICAg
IHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBt
b3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0
Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAx
NSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0z
MigxNSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkg
Kz0gfihrZXkgPDwgMjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0
KFRydXN0ZWRJbW0zMigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFk
ZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92
ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2NChUcnVzdGVk
SW1tUHRyKG1hc2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VS
VChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSB8fCBKSVRD
b2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1
cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAgICAgQXNz
ZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQpAQCAtMTQ4
OSw2ICsxNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xh
c3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0
cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3Jl
UHRyKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJlc3MocmVzdWx0
R1BSLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICAgICB9CisK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHZvaWQgV2FuZ3NJbnQ2NEhhc2goR1BSUmVnIGlucHV0
QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5kaWYKICAgICAKIHByb3RlY3RlZDoKICAg
ICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBAIHR5cGVkZWYgSlND
ZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJB
VElPTiAqQ19KSVRPcGVyYXRpb25fRVN0WlopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMy
X3QsIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJh
dGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVS
QVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgVW5pcXVl
ZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVy
YXRpb25fRUNKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3Qp
OwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0QpKGRvdWJs
ZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fRykoSlNH
bG9iYWxPYmplY3QqKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJh
dGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9Nb2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBNb2R1bGVBbmFseXplcjo6TW9k
dWxlQW5hbHl6ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXks
IGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQm
IGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFy
aWFibGVzKQogICAgIDogbV92bSgmZXhlYy0+dm0oKSkKLSAgICAsIG1fbW9kdWxlUmVjb3JkKGV4
ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBzb3Vy
Y2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykpCisgICAgLCBtX21v
ZHVsZVJlY29yZChleGVjLT52bSgpLCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMt
PnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9kdWxlUmVjb3JkU3RydWN0dXJl
KCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxleGljYWxWYXJp
YWJsZXMpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNo
TWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisKKyNpbmNsdWRlICJDb3BpZWRCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPD4KK2Nv
bnN0IEpTX0VYUE9SVERBVEEgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXk+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9Owor
Cit0ZW1wbGF0ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNr
ZXQiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgordm9p
ZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2Fz
dDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwg
dmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uZXh0KTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2KTsKKworICAgIHN0YXRpY19hc3Nl
cnQoc2l6ZW9mKERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gMCwgIldl
IGFzc3VtZSB0aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBXcml0ZUJhcnJpZXI8VW5rbm93bj4g
bWVtYmVycyBvbmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxX
cml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEp
IC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOworfQorCit0ZW1wbGF0ZTw+Citjb25z
dCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5Pj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRy
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXk+PikgfTsKKwordGVtcGxhdGU8PgorY29uc3QgSlNfRVhQT1JUREFUQSBD
bGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZh
bHVlPj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT4+KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3ZvaWQg
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBT
bG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpz
Q2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faGVhZCk7Cisg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2aXNpdG9yLmNv
cHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRoaXNPYmplY3Qt
Pm1fYnVmZmVyLmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygpKTsKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ+Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZp
c2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNl
bGwsIHZpc2l0b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganND
YXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9y
ZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fYnVm
ZmVyLmdldCgpKSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogb2xkQnVmZmVyID0gdGhp
c09iamVjdC0+bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplSW5CeXRl
cyA9IHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhhc2hNYXBCdWZm
ZXJUeXBlKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyVHlwZSo+KHZpc2l0
b3IuYWxsb2NhdGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOworICAgICAgICBtZW1jcHko
bmV3QnVmZmVyLCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICAgICAgdGhpc09i
amVjdC0+bV9idWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVyKTsKKyAgICAgICAgdmlz
aXRvci5kaWRDb3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
YXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEhhc2hNYXBCdWNrZXREYXRhS2V5IHsKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworfTsKKworc3RydWN0IEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWUgeworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBrZXk7CisgICAgV3JpdGVCYXJy
aWVyPFVua25vd24+IHZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIERhdGE+CitjbGFz
cyBIYXNoTWFwQnVja2V0IDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMgdHlwZW5h
bWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6
dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgewor
ICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3RhdGljIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAg
eworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5nZXQoKTsKKyAg
ICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJl
OjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVj
a2V0KiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldCogYnVja2V0
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEJ1Y2tldDxEYXRhPj4odm0uaGVh
cCkpIEhhc2hNYXBCdWNrZXQodm0sIHNlbGVjdFN0cnVjdHVyZSh2bSkpOworICAgICAgICBidWNr
ZXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKCFidWNrZXQtPm5leHQoKSk7
CisgICAgICAgIEFTU0VSVCghYnVja2V0LT5wcmV2KCkpOworICAgICAgICByZXR1cm4gYnVja2V0
OworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeyB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgc2V0TmV4dChWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tldCkKKyAgICB7
CisgICAgICAgIG1fbmV4dC5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CisgICAgfQorICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBzZXRQcmV2KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAg
IHsKKyAgICAgICAgbV9wcmV2LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIHZvaWQgc2V0S2V5KFZNJiB2bSwgSlNWYWx1ZSBrZXkpCisgICAgeworICAg
ICAgICBtX2RhdGEua2V5LnNldCh2bSwgdGhpcywga2V5KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVl
Pjo6dHlwZSBzZXRWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBt
X2RhdGEudmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleT46OnZhbHVlPjo6dHlwZSBz
ZXRWYWx1ZShWTSYsIEpTVmFsdWUpIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGtl
eSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5rZXkuZ2V0KCk7IH0KKworICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl
X2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWUsIEpT
VmFsdWU+Ojp0eXBlIHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGEu
dmFsdWUuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOworCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0KiBu
ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgQUxXQVlTX0lOTElORSBI
YXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgpOyB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVsZXRlZDsg
fQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZWxldGVkKGJvb2wgZGVsZXRlZCkgeyBtX2Rl
bGV0ZWQgPSBkZWxldGVkOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mS2V5KCkK
KyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgbV9k
YXRhKSArIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBrZXkpOworICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZSwgcHRyZGlm
Zl90Pjo6dHlwZSBvZmZzZXRPZlZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1Rf
T0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihEYXRhLCB2
YWx1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERhdGEgbV9kYXRhOworICAgIFdyaXRlQmFy
cmllcjxIYXNoTWFwQnVja2V0PiBtX25leHQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNr
ZXQ+IG1fcHJldjsKKyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07Cit9OworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBCdWZmZXIgeworcHVibGljOgor
ICAgIEhhc2hNYXBCdWZmZXIoKSA9IGRlbGV0ZTsKKworICAgIHN0YXRpYyBzaXplX3QgYWxsb2Nh
dGlvblNpemUodWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1cm4gY2FwYWNp
dHkgKiBzaXplb2YoQnVja2V0VHlwZSopOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgQnVj
a2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PEJ1Y2tldFR5cGUqKj4odGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWZm
ZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdWludDMy
X3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hNYXBCdWZmZXI6
OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAgICAgdm9pZCogZGF0YSA9IG51bGxwdHI7
CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIodm0uaGVhcCk7CisgICAgICAgIGlmICgh
dm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIGFsbG9jYXRpb25TaXplLCAmZGF0YSkp
IHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hNYXBCdWZm
ZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWZmZXIqPihkYXRhKTsKKyAgICAgICAg
bWVtc2V0KGJ1ZmZlciwgLTEsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgcmV0dXJuIGJ1ZmZl
cjsKKyAgICB9Cit9OworCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGFyZUtleXNFcXVhbChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIC8vIFdlIHdhbnQg
KzAgYW5kIC0wIHRvIGJlIGNvbXBhcmVkIHRvIHRydWUgaGVyZS4gc2FtZVZhbHVlKCkgaXRzZWxm
IGRvZXNuJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhhdCwgaG93ZXZlciwgd2Ugbm9ybWFsaXplIGFs
bCBrZXlzIGJlZm9yZSBjb21wYXJpbmcgYW5kIHN0b3JpbmcKKyAgICAvLyB0aGVtIGluIHRoZSBt
YXAuIFRoZSBub3JtYWxpemF0aW9uIHdpbGwgY29udmVydCAtMC4wIGFuZCAwLjAgdG8gdGhlIGlu
dGVnZXIKKyAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgMC4KKyAgICByZXR1cm4gc2FtZVZhbHVl
KGV4ZWMsIGEsIGIpOworfQorCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbm9ybWFsaXplTWFwS2V5
KEpTVmFsdWUga2V5KQoreworICAgIGlmICgha2V5LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVy
biBrZXk7CisKKyAgICBpZiAoa2V5LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIGtleTsKKwor
ICAgIGRvdWJsZSBkID0ga2V5LmFzRG91YmxlKCk7CisgICAgaWYgKHN0ZDo6aXNuYW4oZCkpCisg
ICAgICAgIHJldHVybiBrZXk7CisKKyAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4oZCk7Cisg
ICAgaWYgKGkgPT0gZCkgeworICAgICAgICAvLyBXaGVuIGEga2V5IGlzIC0wLCB3ZSBjb252ZXJ0
IGl0IHRvIHBvc2l0aXZlIHplcm8uCisgICAgICAgIC8vIFdoZW4gYSBrZXkgaXMgdGhlIGRvdWJs
ZSByZXByZXNlbnRhdGlvbiBmb3IgYW4gaW50ZWdlciwgd2UgY29udmVydCBpdCB0byBhbiBpbnRl
Z2VyLgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaSk7CisgICAgfQorICAgIC8vIFRoaXMgbWVh
bnMga2V5IGlzIGRlZmluaXRlbHkgbm90IG5lZ2F0aXZlIHplcm8sIGFuZCBpdCdzIGRlZmluaXRl
bHkgbm90IGEgZG91YmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIAorICAgIHJldHVy
biBrZXk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
bm9ybWFsaXplTWFwS2V5KHZhbHVlKSA9PSB2YWx1ZSwgIldlIGV4cGVjdCBub3JtYWxpemVkIHZh
bHVlcyBmbG93aW5nIGludG8gdGhpcyBmdW5jdGlvbi4iKTsKKworICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0RvdWJsZSgpKSB7Cisg
ICAgICAgIGRvdWJsZSBkID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICAgICAgaWYgKCFzdGQ6Omlz
bmFuKGQpKSB7CisgICAgICAgICAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4oZCk7CisgICAg
ICAgICAgICBpZiAoaSA9PSBkKQorICAgICAgICAgICAgICAgIHZhbHVlID0ganNOdW1iZXIoaSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAg
SlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgY29uc3QgU3RyaW5n
JiB3dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgICAg
ICByZXR1cm4gd3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0KKworICAgIGF1dG8gd2Fu
Z3NJbnQ2NEhhc2ggPSBbXSAodWludDY0X3Qga2V5KSAtPiB1aW50MzJfdCB7CisgICAgICAgIGtl
eSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAg
a2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAg
IGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAg
IGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpOworICAgIH07CisgICAgdWludDY0
X3QgcmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIHJldHVybiB3YW5nc0lu
dDY0SGFzaChyYXdWYWx1ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0
VHlwZT4KK2NsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWZmZXI8SGFzaE1hcEJ1Y2tldFR5cGU+
IEhhc2hNYXBCdWZmZXJUeXBlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFw
QnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19z
YW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6dmFsdWUsIFN0cnVj
dHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1
cm4gdm0uaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJl
KFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbE1hcFN0cnVjdHVy
ZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRp
YyBIYXNoTWFwSW1wbCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
VmFsdWU+OjpvZmZzZXRPZktleSgpLCAiV2UgYXNzdW1lIHRoaXMgdG8gYmUgdHJ1ZSBpbiB0aGUg
REZHIGFuZCBGVEwgSklULiIpOworCisgICAgICAgIEhhc2hNYXBJbXBsKiBpbXBsID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXApKSBIYXNoTWFwSW1wbCh2
bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGltcGwtPmZpbmlzaENyZWF0aW9uKGV4
ZWMsIHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
dmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNv
cHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAg
SGFzaE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNl
KHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9kZWxldGVD
b3VudCgwKQorICAgICAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICB7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZlcigpOworICAgIH0KKworICAgIHZvaWQg
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgeworICAgICAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKKworICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBtX2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0VHlwZTo6
Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXRU
eXBlOjpjcmVhdGUodm0pKTsKKworICAgICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5n
ZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAg
ICAgbV9oZWFkLT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBtX3RhaWwtPnNldERlbGV0ZWQo
dHJ1ZSk7CisKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUqIGVtcHR5VmFs
dWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0VHlw
ZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTEpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxX
QVlTX0lOTElORSBib29sIGlzRW1wdHkoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7
CisgICAgICAgIHJldHVybiBidWNrZXQgPT0gZW1wdHlWYWx1ZSgpOworICAgIH0KKworICAgIHN0
YXRpYyBIYXNoTWFwQnVja2V0VHlwZSogZGVsZXRlZFZhbHVlKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldFR5cGUqPihzdGF0aWNfY2FzdDx1aW50cHRy
X3Q+KC0zKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0RlbGV0
ZWQoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNr
ZXQgPT0gZGVsZXRlZFZhbHVlKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAg
ICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIHVpbnQzMl90IGhhc2gg
PSBqc01hcEhhc2goZXhlYywgdm0sIGtleSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gZmluZEJ1Y2tl
dChleGVjLCBrZXksIGhhc2gpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1
Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIHVpbnQz
Ml90IGhhc2gpCisgICAgeworICAgICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5KTsKKyAg
ICAgICAgcmV0dXJuIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXplZChleGVjLCBr
ZXksIGhhc2gpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIGlmIChIYXNoTWFwQnVja2V0
VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KSkKKyAgICAgICAgICAgIHJldHVy
biAoKmJ1Y2tldCktPnZhbHVlKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIWZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlKCkpCisgICAgeworICAgICAgICBrZXkgPSBu
b3JtYWxpemVNYXBLZXkoa2V5KTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
ICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgY29u
c3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1aW50MzJfdCBpbmRl
eCA9IGpzTWFwSGFzaChleGVjLCB2bSwga2V5KSAmIG1hc2s7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEhhc2hN
YXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAgIEhhc2hNYXBC
dWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB3aGlsZSAoIWlzRW1w
dHkoYnVja2V0KSkgeworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVL
ZXlzRXF1YWwoZXhlYywga2V5LCBidWNrZXQtPmtleSgpKSkgeworICAgICAgICAgICAgICAgIGJ1
Y2tldC0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAg
ICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKworICAgICAgICBIYXNo
TWFwQnVja2V0VHlwZSogbmV3RW50cnkgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIGJ1ZmZlcltp
bmRleF0gPSBuZXdFbnRyeTsKKyAgICAgICAgbmV3RW50cnktPnNldEtleSh2bSwga2V5KTsKKyAg
ICAgICAgbmV3RW50cnktPnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgIG5ld0VudHJ5LT5z
ZXREZWxldGVkKGZhbHNlKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5ld1RhaWwgPSBI
YXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwgdGhp
cywgbmV3VGFpbCk7CisgICAgICAgIG5ld1RhaWwtPnNldFByZXYodm0sIG5ld0VudHJ5KTsKKyAg
ICAgICAgbmV3VGFpbC0+c2V0RGVsZXRlZCh0cnVlKTsKKyAgICAgICAgbmV3RW50cnktPnNldE5l
eHQodm0sIG5ld1RhaWwpOworICAgICAgICB1aW50MzJfdCBuZXdTaXplID0gKyttX3NpemU7Cisg
ICAgICAgIGlmICgyKm5ld1NpemUgPiBtX2NhcGFjaXR5KQorICAgICAgICAgICAgcmVoYXNoKGV4
ZWMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVj
a2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAgICAgICBpZiAoIWJ1Y2tldCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSogaW1wbCA9ICpidWNrZXQ7CisgICAgICAgIGltcGwtPm5l
eHQoKS0+c2V0UHJldih2bSwgaW1wbC0+cHJldigpKTsKKyAgICAgICAgaW1wbC0+cHJldigpLT5z
ZXROZXh0KHZtLCBpbXBsLT5uZXh0KCkpOworICAgICAgICBpbXBsLT5zZXREZWxldGVkKHRydWUp
OworCisgICAgICAgICpidWNrZXQgPSBkZWxldGVkVmFsdWUoKTsKKworICAgICAgICBtX2RlbGV0
ZUNvdW50Kys7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSB1aW50MzJfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KG1fc2l6ZSA+PSBtX2RlbGV0ZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZSAtIG1fZGVs
ZXRlQ291bnQ7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyKEV4ZWNTdGF0
ZSogZXhlYykKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIG1f
c2l6ZSA9IDA7CisgICAgICAgIG1fZGVsZXRlQ291bnQgPSAwOworICAgICAgICBIYXNoTWFwQnVj
a2V0VHlwZSogaGVhZCA9IG1faGVhZC5nZXQoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUq
IGJ1Y2tldCA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogdGFp
bCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAhPSB0YWlsKSB7CisgICAg
ICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV4dCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAg
ICAgICAgLy8gV2UgcmVzdGFydCBlYWNoIGl0ZXJhdG9yIGJ5IHBvaW50aW5nIGl0IHRvIHRoZSBo
ZWFkIG9mIHRoZSBsaXN0LgorICAgICAgICAgICAgYnVja2V0LT5zZXROZXh0KHZtLCBoZWFkKTsK
KyAgICAgICAgICAgIGJ1Y2tldCA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgICAgbV9oZWFkLT5z
ZXROZXh0KHZtLCBtX3RhaWwuZ2V0KCkpOworICAgICAgICBtX3RhaWwtPnNldFByZXYodm0sIG1f
aGVhZC5nZXQoKSk7CisgICAgICAgIG1fY2FwYWNpdHkgPSA0OworICAgICAgICBtYWtlQW5kU2V0
TmV3QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBi
dWZmZXJTaXplSW5CeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jYXBhY2l0
eSAqIHNpemVvZihIYXNoTWFwQnVja2V0VHlwZSopOworICAgIH0KKworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZCdWZmZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZT
RVRPRihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT4sIG1fYnVmZmVyKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FwYWNpdHkoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT4sIG1f
Y2FwYWNpdHkpOworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBoZWFkKCkgeyByZXR1
cm4gbV9oZWFkLmdldCgpOyB9CisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIHRhaWwoKSB7IHJldHVy
biBtX3RhaWwuZ2V0KCk7IH0KKworICAgIHNpemVfdCBhcHByb3hpbWF0ZVNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoSGFzaE1hcEltcGwpOworICAgICAg
ICBzaXplICs9IGJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIHNpemUgKz0gMiAqIHNpemVv
ZihIYXNoTWFwQnVja2V0VHlwZSk7IC8vIEhlYWQgYW5kIHRhaWwgbWVtYmVycy4KKyAgICAgICAg
c2l6ZSArPSAobV9kZWxldGVDb3VudCArIG1fc2l6ZSkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldFR5
cGUpOyAvLyBOdW1iZXIgb2YgbWVtYmVycyBvbiB0aGUgbGlzdC4KKyAgICAgICAgcmV0dXJuIHNp
emU7CisgICAgfQorCitwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5
cGUqKiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6ZWQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAgIGNvbnN0IHVpbnQz
Ml90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMyX3QgaW5kZXggPSBoYXNo
ICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZm
ZXIoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07
CisKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgICAgIGlmICgh
aXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVja2V0LT5rZXko
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciArIGluZGV4OworICAgICAgICAgICAg
aW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJb
aW5kZXhdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAg
IHZvaWQgcmVoYXNoKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICBtX2NhcGFjaXR5ID0gbV9jYXBhY2l0eSAqIDI7CisgICAgICAgIG1ha2VBbmRT
ZXROZXdCdWZmZXIoZXhlYywgdm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0
aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBl
KiBpdGVyID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBlbmQg
PSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5
IC0gMTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkg
LSAxKSkpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZl
cigpOworICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAgIHVpbnQzMl90
IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBpdGVyLT5rZXkoKSkgJiBtYXNrOworICAgICAg
ICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc2NvcGUuZXhjZXB0aW9uKCksICJBbGwga2V5cyBz
aG91bGQgYWxyZWFkeSBiZSBoYXNoZWQgYmVmb3JlLCBzbyB0aGlzIHNob3VsZCBub3QgdGhyb3cg
YmVjYXVzZSBpdCB3b24ndCByZXNvbHZlIHJvcGVzLiIpOworICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAg
ICAgICAgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgICAgICAgICBidWNr
ZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBpdGVyOworICAgICAgICAgICAgaXRlciA9IGl0ZXIt
Pm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbWFrZUFuZFNldE5ld0J1ZmZl
cihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghKG1fY2Fw
YWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CisKKyAgICAgICAgSGFzaE1hcEJ1ZmZlclR5cGUq
IGJ1ZmZlciA9IEhhc2hNYXBCdWZmZXJUeXBlOjpjcmVhdGUoZXhlYywgdm0sIHRoaXMsIG1fY2Fw
YWNpdHkpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBidWZmZXIpOworICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY2FwYWNpdHk7IGkrKykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNFbXB0eSh0aGlz
LT5idWZmZXIoKVtpXSkpOworICAgICAgICB9CisgICAgfQorCisgICAgV3JpdGVCYXJyaWVyPEhh
c2hNYXBCdWNrZXRUeXBlPiBtX2hlYWQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRU
eXBlPiBtX3RhaWw7CisgICAgQ29weUJhcnJpZXI8SGFzaE1hcEJ1ZmZlclR5cGU+IG1fYnVmZmVy
OworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICB1aW50MzJfdCBtX2RlbGV0ZUNvdW50OworICAg
IHVpbnQzMl90IG1fY2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCShyZXZpc2lvbiAyMDUzMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNiArNjIsOSBAQCBlbnVtIEpTX0VYUE9SVF9QUklWQVRFIEludHJpbnNpYyB7
CiAgICAgSXNSZWdFeHBPYmplY3RJbnRyaW5zaWMsCiAgICAgSXNUeXBlZEFycmF5Vmlld0ludHJp
bnNpYywKICAgICBCb3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxJbnRyaW5zaWMsCisgICAgSlNN
YXBHZXRJbnRyaW5zaWMsCisgICAgSlNNYXBIYXNJbnRyaW5zaWMsCisgICAgSlNTZXRIYXNJbnRy
aW5zaWMsCiAKICAgICAvLyBHZXR0ZXIgaW50cmluc2ljcy4KICAgICBUeXBlZEFycmF5TGVuZ3Ro
SW50cmluc2ljLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDYsNiArNjA2LDkgQEAgaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBKU0NlbGwqIGEsIAogCiBib29sIGlzVGhpc1ZhbHVlQWx0ZXJl
ZChjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBKU09iamVjdCogYmFzZU9iamVjdCk7CiAKKy8vIFNl
ZSBzZWN0aW9uIDcuMi45OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zYW1l
dmFsdWUKK2Jvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKTsK
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0NKU1ZhbHVlX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNW
YWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1OCw2ICsxMDU4LDIyIEBAIEFMV0FZ
U19JTkxJTkUgYm9vbCBpc1RoaXNWYWx1ZUFsdGVyZWQoY28KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8j
c2VjLXNhbWV2YWx1ZQorQUxXQVlTX0lOTElORSBib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIGlmICghYS5pc051bWJlcigpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7CisgICAgaWYgKCFi
LmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUgeCA9IGEuYXNO
dW1iZXIoKTsKKyAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKKyAgICBib29sIHhJc05hTiA9
IHN0ZDo6aXNuYW4oeCk7CisgICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkpOworICAgIGlm
ICh4SXNOYU4gfHwgeUlzTmFOKQorICAgICAgICByZXR1cm4geElzTmFOICYmIHlJc05hTjsKKyAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTVmFsdWVJbmxp
bmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQxLDcgKzY0MSw3
IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+UmVmbGVjdCwgcmVmbGVj
dE9iamVjdCwgRG9udEVudW0pOwogCiAgICAgbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1cmUuc2V0KHZt
LCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX21vZHVs
ZUxvYWRlclByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1fbW9kdWxlTG9hZGVyLnNldCh2bSwgdGhp
cywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZSh2bSwgdGhpcywgbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1
cmUuZ2V0KCkpKTsKKyAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9h
ZGVyOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB2bSwgdGhpcywgbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1
cmUuZ2V0KCkpKTsKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlSW50ZXJuYWxNb2R1bGVMb2FkZXIo
KSkKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPkxvYWRlciwgbV9tb2R1bGVMb2FkZXIuZ2V0KCksIERvbnRFbnVtKTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
Niw3OCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU01hcC5oIgog
Ci0jaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNDSlNWYWx1ZUlu
bGluZXMuaCIKLSNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiTWFwRGF0YUlu
bGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNsdWRlICJTdHJ1
Y3R1cmVJbmxpbmVzLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNN
YXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAg
IEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgdGhpc09iamVj
dC0+SlNNYXA6On5KU01hcCgpOwotfQotCi1zaXplX3QgSlNNYXA6OmVzdGltYXRlZFNpemUoSlND
ZWxsKiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2Vs
bCk7Ci0gICAgc2l6ZV90IG1hcERhdGFTaXplID0gdGhpc09iamVjdC0+bV9tYXBEYXRhLmNhcGFj
aXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgbWFw
RGF0YVNpemU7Ci19Ci0KIFN0cmluZyBKU01hcDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3QiKTsKIH0K
IAotdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAg
anNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0
b3IpOwotfQotCi12b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29w
eVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBCYXNlOjpjb3B5QmFj
a2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nhc3Q8SlNNYXAqPihjZWxs
KS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOwotfQotCi1ib29s
IEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAgICByZXR1cm4g
bV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Ci19Ci0KLXNpemVfdCBKU01hcDo6c2l6ZShF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4ZWMpOwotfQot
Ci1KU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5KTsKLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlzLCBrZXksIHZhbHVlKTsK
LX0KLQotdm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAgICBtX21hcERhdGEuY2xl
YXIoKTsKLX0KLQotYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXkpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywga2V5KTsKLX0KLQogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lvbiAyMDUzMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0yNiwxMDggKzI2LDQ5IEBACiAjaWZuZGVmIEpTTWFwX2gKICNkZWZpbmUgSlNNYXBfaAogCi0j
aW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgot
I2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi1jbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rl
c3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBNYXBCYXNlPEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+IHsKKyAgICB0eXBlZGVmIE1hcEJhc2U8
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4gQmFzZTsKIHB1YmxpYzoK
LSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7Ci0KICAgICBmcmllbmQgY2xh
c3MgSlNNYXBJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3Qg
RW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAotICAgIC8vIGZpZWxk
cyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAgcHJpdmF0
ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OwotICAgICAgICBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgV3Jp
dGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFs
dWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7
Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUg
a2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVy
KGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiB2bSwgY29uc3Qg
SlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV92
YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNs
ZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAgICAgICAgICAg
IG1fdmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0eXBlZGVmIE1hcERh
dGFJbXBsPEVudHJ5LCBKU01hcEl0ZXJhdG9yPiBNYXBEYXRhOwotCiAgICAgREVDTEFSRV9FWFBP
UlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAK
LSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0sIHN0cnVjdHVyZSk7
Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAg
ICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0o
KSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5nZXQoZXhlYywga2V5KTsKICAg
ICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBzaXplX3Qgc2l6
ZShFeGVjU3RhdGUqKTsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNW
YWx1ZSB2YWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJlbW92
ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBt
X21hcC0+YWRkKGV4ZWMsIGtleSwgdmFsdWUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBKU01h
cChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0
ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCos
IENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwotCi0gICAgTWFwRGF0YSBtX21hcERhdGE7
CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjYsOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKIAorI2lu
Y2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJzLmgiCisj
aW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU01hcC5oIgpAQCAt
NDEsNiArNDQsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFwLnNldCh2bSwgdGhpcywg
aXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0ZXJhdG9yKHZtLCBtX21hcC0+aW1wbCgpLT5oZWFk
KCkpOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTQ5LDYgKzUzLDcgQEAgdm9pZCBKU01hcEl0ZXJh
dG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFMo
dGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7CisgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7CiB9CiAKIEpTVmFsdWUgSlNNYXBJ
dGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBrZXksIEpT
VmFsdWUgdmFsdWUpCkBAIC02Miw4ICs2Nyw5IEBAIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3Jl
YXRlUGFpcihDYWxsRnIKIAogSlNNYXBJdGVyYXRvciogSlNNYXBJdGVyYXRvcjo6Y2xvbmUoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBKU01hcEl0ZXJhdG9yOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0
cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwgbV9raW5kKTsKLSAgICBjbG9uZS0+bV9pdGVyYXRvciA9
IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIGNsb25lID0g
SlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCkt
Pm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgpLCBtX2tpbmQpOworICAgIGNsb25l
LT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAgICByZXR1cm4gY2xvbmU7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJ
KHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
SXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgSlNNYXBJdGVyYXRvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAg
ICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4gSGFzaE1h
cEJ1Y2tldFR5cGU7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7
CiAKQEAgLTUxLDUyICs1Miw2MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsK
ICAgICB9CiAKLSAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZh
bHVlKQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFuY2VJdGVyKEV4
ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUs
IEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIpKQorICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSogcHJldiA9IG1faXRlci5nZXQoKTsKKyAgICAgICAgaWYg
KCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAm
JiBidWNrZXQtPmRlbGV0ZWQoKSkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAg
ICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICgh
YnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJh
dG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZh
bHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGwg
bmV4dCgpLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKyAgICBib29sIG5leHQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVy
YXRlVmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2
YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJh
dGVLZXkpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUg
PSBidWNrZXQtPmtleSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0
ZVBhaXIoY2FsbEZyYW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAgICAgICB2YWx1
ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT52YWx1ZSgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFsdWUoSlNWYWx1
ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6
OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRl
cmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGFk
dmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgICAgICBrZXkgPSBwYWlyLmtleTsKLSAgICAgICAgdmFsdWUgPSBwYWly
LnZhbHVlOworICAgICAgICBrZXkgPSBidWNrZXQtPmtleSgpOworICAgICAgICB2YWx1ZSA9IGJ1
Y2tldC0+dmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBm
aW5pc2goKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsKLSAgICB9Ci0KICAg
ICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICBKU1Zh
bHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX21hcC5nZXQoKTsgfQogICAgIEpT
TWFwSXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNNYXA6Ok1hcERhdGE6Okl0
ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9pdGVy
YXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNNYXBJdGVyYXRvcihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU01hcCogaXRlcmF0ZWRPYmplY3QsIEl0ZXJhdGlvbktpbmQga2lu
ZCkKKyAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTWFw
KiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAg
ICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX21hcERhdGEuY3JlYXRlSXRlcmF0
b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQorICAgIHsgfQorCisgICAgdm9p
ZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCiAgICAgewor
ICAgICAgICBtX2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQpOwogICAgIH0KIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCopOwpA
QCAtMTA0LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21h
cDsKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3Jp
dGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBt
X2tpbmQ7CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFw
SXRlcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSAr
NTUsMTQgQEAgSlNNb2R1bGVMb2FkZXI6OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwgUwogewogfQog
Ci12b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsK
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8o
KSkpOwotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdp
c3RyeSIpLCBKU01hcDo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBt
YXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgp
KTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBtYXApOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU01vZHVsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3
LDEwICs0NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJlYWR5ID0gNiwKICAgICB9OwogCi0gICAg
c3RhdGljIEpTTW9kdWxlTG9hZGVyKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNNb2R1bGVMb2Fk
ZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU01vZHVsZUxv
YWRlciogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVMb2FkZXI+
KHZtLmhlYXApKSBKU01vZHVsZUxvYWRlcih2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgb2JqZWN0
LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgb2JqZWN0LT5maW5p
c2hDcmVhdGlvbihleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG9iamVj
dDsKICAgICB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZXZhbHVh
dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3JkLCBKU1ZhbHVl
IGluaXRpYXRvcik7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwg
SlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZN
JiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2
aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTcgQEAgdm9pZCBKU01vZHVs
ZVJlY29yZDo6ZGVzdHJveShKU0NlbGwqIGNlbAogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlUmVj
b3JkOjp+SlNNb2R1bGVSZWNvcmQoKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtKQordm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInJlZ2lzdHJ5RW50cnkiKSksIGpzVW5k
ZWZpbmVkKCkpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0s
IEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVkIikpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIG1f
ZGVwZW5kZW5jaWVzTWFwLnNldCh2bSwgdGhpcywgSlNNYXA6OmNyZWF0ZSh2bSwgZ2xvYmFsT2Jq
ZWN0KCktPm1hcFN0cnVjdHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1df
U0NPUEUodm0pOworICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9i
YWxPYmplY3QoKS0+bWFwU3RydWN0dXJlKCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5l
eGNlcHRpb24oKSk7CisgICAgbV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwog
ICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJh
bCgiZGVwZW5kZW5jaWVzTWFwIikpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1
bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMTAgKzg3LDEwIEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyBKU01vZHVsZVJlY29yZCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYg
c291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMs
IGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgc3RhdGlj
IEpTTW9kdWxlUmVjb3JkKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFi
bGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgIHsK
ICAgICAgICAgSlNNb2R1bGVSZWNvcmQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNNb2R1bGVSZWNvcmQ+KHZtLmhlYXApKSBKU01vZHVsZVJlY29yZCh2bSwgc3RydWN0
dXJlLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFy
aWFibGVzKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAg
aW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwogICAgIH0KIApAQCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0K
IAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9u
KEV4ZWNTdGF0ZSosIFZNJik7CiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogZ2V0TW9k
dWxlTmFtZXNwYWNlKEV4ZWNTdGF0ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXQuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcwICsyNiwxMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAKLSNpbmNsdWRlICJDb3BpZWRC
bG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTU2V0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUg
IlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKLQog
bmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZvID0geyAiU2V0
IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkgfTsKIAotdm9p
ZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNTZXQqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU1NldDo6fkpTU2V0KCk7
Ci19Ci0KIFN0cmluZyBKU1NldDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0
YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3QiKTsKIH0KIAotc2l6ZV90
IEpTU2V0Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU1NldCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHNpemVfdCBzZXREYXRhU2l6ZSA9IHRo
aXNPYmplY3QtPm1fc2V0RGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKLSAgICByZXR1cm4gQmFzZTo6
ZXN0aW1hdGVkU2l6ZShjZWxsKSArIHNldERhdGFTaXplOwotfQotCi12b2lkIEpTU2V0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNTZXQqPihjZWxs
KS0+bV9zZXREYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNT
ZXQ6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwg
Q29weVRva2VuIHRva2VuKQotewotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlz
aXRvciwgdG9rZW4pOwotICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERhdGEuY29weUJh
Y2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7Ci19Ci0KLWJvb2wgSlNTZXQ6OmhhcyhFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5jb250YWlu
cyhleGVjLCB2YWx1ZSk7Ci19Ci0KLXNpemVfdCBKU1NldDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5zaXplKGV4ZWMpOwotfQotCi12b2lkIEpTU2V0Ojph
ZGQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIG1fc2V0RGF0YS5zZXQo
ZXhlYywgdGhpcywgdmFsdWUsIHZhbHVlKTsKLX0KLQotdm9pZCBKU1NldDo6Y2xlYXIoRXhlY1N0
YXRlKikKLXsKLSAgICBtX3NldERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBKU1NldDo6cmVtb3Zl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9zZXREYXRh
LnJlbW92ZShleGVjLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXQuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTAzICsyNiw0NSBAQAogI2lmbmRl
ZiBKU1NldF9oCiAjZGVmaW5lIEpTU2V0X2gKIAotI2luY2x1ZGUgIkpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJNYXBEYXRhLmgiCisjaW5j
bHVkZSAiTWFwQmFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNTZXRJdGVyYXRv
cjsKIAotY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3QgeworY2xhc3Mg
SlNTZXQgOiBwdWJsaWMgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
Pj4geworICAgIHR5cGVkZWYgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5Pj4gQmFzZTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJh
c2U7CiAKICAgICBmcmllbmQgY2xhc3MgSlNTZXRJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJr
aW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBo
YXZlIGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFz
cyBFbnRyeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1f
a2V5OwotCi0gICAgcHVibGljOgotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4m
IGtleSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tleTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQot
ICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUga2V5
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGtl
eSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiwgY29uc3QgSlNDZWxs
KiwgSlNWYWx1ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhcigp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9
OwotCi0gICAgdHlwZWRlZiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNTZXRJdGVyYXRvcj4gU2V0RGF0
YTsKLQogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBj
cmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNTZXRUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShFeGVjU3RhdGUq
IGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBKU1Nl
dCogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1NldD4odm0uaGVhcCkp
IEpTU2V0KHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0pOwogICAgICAg
ICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBBTFdBWVNfSU5MSU5FIHZv
aWQgYWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiAgICAgewotICAgICAgICByZXR1
cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgICAgIG1fbWFwLT5hZGQoZXhl
Yywga2V5KTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAg
ICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFk
ZChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSopOwotICAg
IGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotCiBwcml2YXRlOgogICAgIEpTU2V0
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQotICAgICAgICAsIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCi0gICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBT
bG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwg
Q29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1l
KGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0KLSAgICBTZXREYXRhIG1fc2V0RGF0YTsK
IH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0
SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2ICs0MSw3IEBA
IHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpm
aW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVj
dCk7CisgICAgc2V0SXRlcmF0b3Iodm0sIG1fc2V0LT5pbXBsKCktPmhlYWQoKSk7CiB9CiAKIHZv
aWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQpAQCAtNDksNiArNTAsNyBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKKyAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9pdGVyKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVh
dGVQYWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkK
QEAgLTYyLDggKzY0LDkgQEAgSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxG
cgogCiBKU1NldEl0ZXJhdG9yKiBKU1NldEl0ZXJhdG9yOjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMp
CiB7Ci0gICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBl
eGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIG1f
c2V0LmdldCgpLCBtX2tpbmQpOwotICAgIGNsb25lLT5tX2l0ZXJhdG9yID0gbV9pdGVyYXRvcjsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2xvbmUgPSBKU1NldEl0ZXJhdG9y
OjpjcmVhdGUodm0sIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JT
dHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1fa2luZCk7CisgICAgY2xvbmUtPnNldEl0ZXJhdG9y
KHZtLCBtX2l0ZXIuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBK
U1NldEl0ZXJhdG9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4gSGFzaE1hcEJ1Y2tldFR5cGU7CiBwdWJs
aWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKQEAgLTUyLDQ2ICs1Myw1
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29s
IG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAg
ICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0g
ICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0
VHlwZSogcHJldiA9IG1faXRlci5nZXQoKTsKKyAgICAgICAgaWYgKCFwcmV2KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBt
X2l0ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQo
KSkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1
Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAg
ICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1
Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJz
dCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGwgbmV4dCgpLgorICAgICAgICBy
ZXR1cm4gYnVja2V0OworICAgIH0KKworICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9
IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKwogICAgICAgICBpZiAobV9raW5kID09IEl0ZXJhdGVWYWx1ZSB8fCBtX2tp
bmQgPT0gSXRlcmF0ZUtleSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci5rZXk7CisgICAgICAg
ICAgICB2YWx1ZSA9IGJ1Y2tldC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZh
bHVlID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLmtleSk7CisgICAgICAg
ICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT5rZXko
KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoKCkKLSAg
ICB7Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7Ci0gICAgfQotCiAgICAgSXRlcmF0aW9u
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgSlNWYWx1ZSBpdGVyYXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuZ2V0KCk7IH0KICAgICBKU1NldEl0ZXJhdG9y
KiBjbG9uZShFeGVjU3RhdGUqKTsKIAotICAgIEpTU2V0OjpTZXREYXRhOjpJdGVyYXRvckRhdGEq
IGl0ZXJhdG9yRGF0YSgpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faXRlcmF0b3I7Ci0gICAg
fQotCiBwcml2YXRlOgotICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisgICAgSlNT
ZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCosIEl0ZXJhdGlv
bktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9p
dGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bV9zZXREYXRhLmNyZWF0ZUl0ZXJhdG9yRGF0YSh0aGlz
KSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7CiAgICAgfQogCisgICAgdm9pZCBzZXRJ
dGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCisgICAgeworICAgICAg
ICBtX2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQpOyAKKyAgICB9CisKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqKTsKICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwg
SlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAgICBKU1NldDo6U2V0
RGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBC
dWNrZXRUeXBlPiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElD
X0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw4ICs4MiwxMCBAQCBlbnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogICAgIE1vZHVsZUVudmly
b25tZW50VHlwZSwKICAgICBSZWdFeHBPYmplY3RUeXBlLAogICAgIFByb3h5T2JqZWN0VHlwZSwK
KyAgICBKU01hcFR5cGUsCisgICAgSlNTZXRUeXBlLAogCi0gICAgTGFzdEpTQ09iamVjdFR5cGUg
PSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVjdFR5cGUgPSBKU1NldFR5cGUsCiB9
OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9PSBzaXplb2YodWludDhfdCksIHNp
emVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvTWFwQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCisKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVj
a2V0VHlwZT4KK3ZvaWQgTWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT46OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBNYXBCYXNlKiB0aGlz
T2JqZWN0ID0gc3RhdGljX2Nhc3Q8TWFwQmFzZSo+KGNlbGwpOworICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fbWFwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBlPgor
c2l6ZV90IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCog
Y2VsbCkKK3sKKyAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIHN0YXRpY19j
YXN0PE1hcEJhc2UqPihjZWxsKS0+bV9tYXAtPmFwcHJveGltYXRlU2l6ZSgpOworfQorCit0ZW1w
bGF0ZSBjbGFzcyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4+OwordGVtcGxhdGUgY2xhc3MgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5Pj47CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcEJhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBlPgorY2xh
c3MgTWFwQmFzZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hN
YXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPiBIYXNoTWFwSW1wbFR5cGU7CisgICAgdHlwZWRlZiBK
U05vbkZpbmFsT2JqZWN0IEJhc2U7CitwdWJsaWM6CisKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNr
ZXRUeXBlIEJ1Y2tldFR5cGU7CisKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBzaXplKEV4ZWNT
dGF0ZSopCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnNpemUoKTsKKyAgICB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmhhcyhleGVjLCBrZXkpOworICAgIH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAg
ICBtX21hcC0+Y2xlYXIoZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIHJl
bW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbWFwLT5yZW1vdmUoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEhh
c2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5
LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5maW5kQnVja2V0
KGV4ZWMsIGtleSwgaGFzaCk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
Zkhhc2hNYXBJbXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFw
QmFzZTxIYXNoTWFwQnVja2V0VHlwZT4sIG1fbWFwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIEhhc2hNYXBJbXBsVHlwZSogaW1wbCgpIHsgcmV0dXJuIG1fbWFwLmdldCgpOyB9CisKKyAg
ICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVD
TEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEhhc2hNYXBJbXBsVHlwZSogaW1wbCA9IEhh
c2hNYXBJbXBsVHlwZTo6Y3JlYXRlKGV4ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9tYXAuc2V0
KHZtLCB0aGlzLCBpbXBsKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBNYXBCYXNlKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7
CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwor
CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBJbXBsVHlwZT4gbV9tYXA7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0
cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSAr
NjIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5j
YWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJlID0g
SW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3
VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgSlNNYXAqIG1hcCA9
IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7CisgICAgaWYgKFVOTElLRUxZ
KHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKCkpOwotICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIG1hcFN0cnVjdHVy
ZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChp
dGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRv
clByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYwLDcgKzYwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJ
dGVyYXRvcgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxs
RnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRl
cmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Ci0gICAgaXRlcmF0
b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JS
ZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2
aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTQgKzcwLDEzIEBAIHZvaWQgTWFwUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBtYXBQcm90b0Z1bmNDbGVh
ciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFByb3RvRnVuY0RlbGV0ZSwg
RG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7Ci0g
ICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1l
cy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0lO
VFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Z2V0
LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldEludHJpbnNpYyk7CisgICAg
SlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSwgSlNNYXBIYXNJbnRy
aW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiAgICAgSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVp
bHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jS2V5cywgRG9udEVudW0s
IDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5j
VmFsdWVzLCBEb250RW51bSwgMCk7CiAKLSAgICAvLyBQcml2YXRlIGdldCAvIHNldCBvcGVyYXRp
b25zLgotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIG1hcFByb3RvRnVuY0dl
dCwgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2YXRl
TmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldEludHJpbnNpYyk7
CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jU2V0LCBE
b250RW51bSwgMik7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0gSlNGdW5jdGlvbjo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygp
LmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVuY0VudHJpZXMpOwpAQCAt
OTMsMTYgKzkyLDIxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRNYXAoQ2FsbEYK
ICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkgeworICAg
IGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAgICAgICB0aHJvd1ZNRXJy
b3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRo
aXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgSlNNYXAqIG1h
cCA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAgIGlmICghbWFwKSB7Ci0g
ICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTWFw
IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbWFwOworCisgICAgaWYgKExJS0VMWSh0aGlzVmFs
dWUuYXNDZWxsKCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKQorICAgICAgICByZXR1cm4ganNDYXN0
PEpTTWFwKj4odGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3Bl
LCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0Iikp
OworICAgIHJldHVybiBudWxscHRyOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdmFsdWUg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbih2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpT
TWFwVHlwZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVu
Y0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTg5LDExICsxOTMsNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCktPmdsb2Jh
bE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlS2V5KSk7
CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oanNE
eW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpOwotfQotCiBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkpKTsKQEAgLTIwNiwxMyArMjA1LDEyIEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01h
cEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU01hcEl0ZXJhdG9yKiBpdGVy
YXRvciA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgIEpT
VmFsdWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShrZXksIHZh
bHVlKSkgeworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGV4ZWMsIGtleSwgdmFsdWUp
KSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJ
bmRleChleGVjLCAwLCBrZXkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgo
ZXhlYywgMSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bihmYWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVz
Y3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwyMiArMTkxLDYgQEAgdm9pZCBQcm9w
ZXJ0eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAgIG1fYXR0cmlidXRlcyAmPSB+UmVh
ZE9ubHk7CiB9CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQotewotICAgIGlmICghYS5pc051bWJlcigpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7Ci0gICAgaWYg
KCFiLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb3VibGUgeCA9IGEu
YXNOdW1iZXIoKTsKLSAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKLSAgICBib29sIHhJc05h
TiA9IHN0ZDo6aXNuYW4oeCk7Ci0gICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkpOwotICAg
IGlmICh4SXNOYU4gfHwgeUlzTmFOKQotICAgICAgICByZXR1cm4geElzTmFOICYmIHlJc05hTjsK
LSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHkpOwotfQotCiBib29sIFByb3BlcnR5RGVzY3JpcHRvcjo6ZXF1YWxUbyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CiB7CiAgICAg
aWYgKG90aGVyLm1fdmFsdWUuaXNFbXB0eSgpICE9IG1fdmFsdWUuaXNFbXB0eSgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3Iu
aAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKIGNsYXNzIEdldHRlclNldHRlcjsKIAotLy8gU2VlIEVTNS4xIDkuMTIKLWJv
b2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwotCiBjbGFzcyBQcm9w
ZXJ0eURlc2NyaXB0b3IgewogcHVibGljOgogICAgIFByb3BlcnR5RGVzY3JpcHRvcigpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDExIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxP
YmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246
OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxP
YmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKGV4
ZWMsIHZtLCBzZXRTdHJ1Y3R1cmUpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24o
KSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBKU1Nl
dCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCBzZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUg
aXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmlu
ZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJv
dG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2
MCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3IKIAogICAgIGlm
IChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQs
IGZhbHNlKSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgp
LCB0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAs
NyBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YWRkLCBz
ZXRQcm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJ
VEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgc2V0UHJvdG9GdW5jQ2xl
YXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQcm90b0Z1bmNEZWxldGUs
IERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOwor
ICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEsIEpTU2V0SGFz
SW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLCBzZXRQ
cm90b0Z1bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1bmN0aW9uKiB2YWx1ZXMg
PSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmluZygpLCBzZXRQcm90b0Z1
bmNWYWx1ZXMpOwpAQCAtODcsMTYgKzg3LDE0IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU2V0
KiBnZXRTZXQoQ2FsbEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNP
YmplY3QoKSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAg
ICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJv
cihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9
Ci0gICAgSlNTZXQqIHNldCA9IGpzRHluYW1pY0Nhc3Q8SlNTZXQqPih0aGlzVmFsdWUpOwotICAg
IGlmICghc2V0KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFT
Q0lJTGl0ZXJhbCgiU2V0IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVNldCBvYmplY3QiKSk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gc2V0OworICAgIGlmIChM
SUtFTFkodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNTZXRUeXBlKSkKKyAgICAgICAg
cmV0dXJuIGpzQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7CisgICAgdGhyb3dUeXBlRXJyb3IoY2Fs
bEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24t
U2V0IG9iamVjdCIpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0x
ODYsNyArMTg0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuYwog
ICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwgcmVzdWx0KTsKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICB9Ci0g
ICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiSlNJbnRlcm5hbFBy
b21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5j
bHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb21pc2VE
ZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1
ZGUgIkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgpAQCAtMjQ5LDYgKzI1MCwxMCBAQCBWTTo6Vk0o
Vk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZ
KQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1i
bHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNlbmRp
ZgorICAgIGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIGhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAKICAgICBpdGVy
YXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp0aGlzLCBK
U0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpLCAxKSkpOwog
ICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZVN0ZEZ1
bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzEsNiArMzMx
LDEwIEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJsb2NrU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOworICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25n
PFN0cnVjdHVyZT4gaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0
dXJlPiBoYXNoTWFwSW1wbFNldFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNo
TWFwSW1wbE1hcFN0cnVjdHVyZTsKIAogICAgIFN0cm9uZzxKU0NlbGw+IGl0ZXJhdGlvblRlcm1p
bmF0b3I7CiAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTYtMDktMDEgIFNhYW0gQmFy
YXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBKU01hcCBhbmQgSlNTZXQg
ZmFzdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NjA5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBO
byBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvTWFwQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxp
emUpOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKToK
KwogMjAxNi0wOS0wMSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgogCiAgICAgICAgIEZpeCBNYWMgQ01ha2UgYnVpbGQgYWZ0ZXIgcjIwNTI2Ni4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0hhc2hN
YXBJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisj
aWZuZGVmIFdlYkNvcmVfRldEX0hhc2hNYXBJbXBsX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSGFz
aE1hcEltcGxfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hhc2hNYXBJbXBsLmg+CisjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRp
bWUvTWFwQmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9NYXBCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisj
aWZuZGVmIFdlYkNvcmVfRldEX01hcEJhc2VfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9NYXBCYXNl
X2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXBCYXNlLmg+CisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2OCw3ICsxMzY4LDcg
QEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAg
Y2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7CiAgICAgICAgICAgICAgICAgSlNNYXBJdGVy
YXRvciogaXRlcmF0b3IgPSBtYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAg
ICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4
dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+
bmV4dEtleVZhbHVlKG1fZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAg
bWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihvYmplY3QpKTsKQEAgLTI1NDUsNyArMjU0
NSw5IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAg
bWFwT2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNr
LnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAg
ICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmpl
Y3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3Jl
YXRlKG1fZXhlYywgbV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkp
OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAg
ICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZCht
YXApOwogICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG1hcCk7CiAgICAgICAg
ICAgICBtYXBTdGFjay5hcHBlbmQobWFwKTsKQEAgLTI1NzQsNyArMjU3Niw5IEBAIERlc2VyaWFs
aXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAgc2V0T2JqZWN0U3RhcnRT
dGF0ZTogewogICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGlt
dW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWly
KEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTU2V0KiBzZXQg
PSBKU1NldDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYywgbV9l
eGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAg
aWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGdv
dG8gZXJyb3I7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChzZXQpOwogICAgICAgICAg
ICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKHNldCk7CiAgICAgICAgICAgICBzZXRTdGFjay5h
cHBlbmQoc2V0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287803</attachid>
            <date>2016-09-02 12:54:10 -0700</date>
            <delta_ts>2016-09-06 12:42:22 -0700</delta_ts>
            <desc>patch</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>179823</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbnNlLXNldC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHJldmlzaW9uIDApCisrKyBK
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIAorICAgIGZ1bmN0aW9uIGJlbmNoKG5hbWUs
IGYsIGFyZykgeworICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGYoYXJnKTsKKyAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlOworICAgICAgICBjb25z
dCB2ZXJib3NlID0gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJp
bnQobmFtZSArICIgIiArIHJlc3VsdCArICIgIiArIChlbmQtc3RhcnQpICsgIm1zIik7CisgICAg
fQorCisgICAgdmFyIGRlbnNlU2V0ID0gbmV3IFNldDsKKyAgICB2YXIgZXhjbHVkZVNldCA9IFsx
MjMsIDEyMzAsIDEyMzAwLCAxMjMwMDAsIDIzNCwgMjM0MCwgMjM0MDBdOworICAgIGZvciAodmFy
IGlkeCA9IDA7IGlkeCA8IDVlNjsgKytpZHgpIHsKKyAgICAgICAgaWYgKGV4Y2x1ZGVTZXQuaW5j
bHVkZXMoaWR4KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkZW5zZVNldC5hZGQo
aWR4KTsKKyAgICB9CisKKyAgICBiZW5jaCgiRGVuc2UgU2V0IFByb3BlcnR5IEV4aXN0ZW5jZSIs
IGZ1bmN0aW9uKHMpIHsKKyAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCA1ZTY7ICsraSkKKyAgICAgICAgICAgIGlmIChzLmhhcyhpKSkKKyAgICAgICAg
ICAgICAgICBjb3VudCsrCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9LCBkZW5zZVNldCk7
CisKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0
aW9uLXdpdGgtYWRkaXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2xhcmdlLW1hcC1pdGVyYXRpb24td2l0aC1hZGRpdGlvbnMuanMJKHJldmlzaW9uIDApCisr
KyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdpdGgtYWRkaXRp
b25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2xldCBjb3VudGVyID0gMDsK
K2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7
CisgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC45NSkgeworICAgICAgICAgICAgbWFwLnNl
dCgiIiArIGNvdW50ZXIsIGNvdW50ZXIpOworICAgICAgICAgICAgKytjb3VudGVyOworICAgICAg
ICB9CisgICAgfQorfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIGxl
dCBtYXAgPSBuZXcgTWFwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAg
ICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXApOworICAgIGNv
bnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0
ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdpdGgtbXV0YXRpb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRoLW11dGF0aW9u
LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0
ZXJhdGlvbi13aXRoLW11dGF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAK
K2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7
CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjk1
KSB7CisgICAgICAgICAgICBtYXAuZGVsZXRlKGtleSk7CisgICAgICAgIH0KKyAgICB9Cit9Citu
b0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7
CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDsgaSsrKQorICAgICAgICBtYXAuc2V0KGks
IGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXApOworICAgIGNvbnN0IHZlcmJvc2UgPSBm
YWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0
KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAt
aXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2xhcmdl
LW1hcC1pdGVyYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9sYXJnZS1tYXAtaXRlcmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAK
K2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7
CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICB9Cit9Citub0lubGluZShiYXIpOworCitmdW5j
dGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDsgaSsrKQorICAgICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3Rh
cnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAg
ICAgIGJhcihtYXApOworICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4
OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9tYXAtaGFzLWdldC1jc2Utb3Bwb3J0dW5pdHkuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFwLWhhcy1nZXQtY3NlLW9w
cG9ydHVuaXR5LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFw
LWhhcy1nZXQtY3NlLW9wcG9ydHVuaXR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgg
QEAKK2Z1bmN0aW9uIGJhcihtYXAsIHApIHsKKyAgICBpZiAobWFwLmhhcyhwKSkKKyAgICAgICAg
cmV0dXJuIG1hcC5nZXQocCk7Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oKSB7
CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbGV0IGl0ZW1zID0gWworICAgICAgICBbMTAs
IDUwXSwKKyAgICAgICAgWyI0NTAiLCA3OF0sCisgICAgICAgIFt7fSwge31dLAorICAgICAgICBb
U3ltYm9sKCksIHRydWVdLAorICAgICAgICBbdW5kZWZpbmVkLCBudWxsXSwKKyAgICAgICAgW3Ry
dWUsIG51bGxdLAorICAgICAgICBbZmFsc2UsIHRydWVdLAorICAgICAgICBbNDUuODcsIHt9XQor
ICAgIF07CisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGl0ZW1zKQorICAgICAgICBtYXAu
c2V0KGtleSwgdmFsdWUpOworICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyBpKyspCisgICAgICAgIGJhcihtYXAsIGl0ZW1zW2kgJSBp
dGVtcy5sZW5ndGhdWzBdKTsKKyAgICBjb25zdCB2ZXJib3NlID0gZmFsc2U7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIHByaW50KERhdGUubm93KCkgLSBzdGFydCk7Cit9Citmb28oKTsKSW5k
ZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3NwYXJzZS1zZXQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9taWNyb2JlbmNobWFya3Mvc3BhcnNlLXNldC5qcwkocmV2aXNpb24gMCkKKysrIEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL3NwYXJzZS1zZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNSBAQAorKGZ1bmN0aW9uKCkgeworICAgIAorICAgIGZ1bmN0aW9uIGJlbmNoKG5hbWUs
IGYsIGFyZykgeworICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGYoYXJnKTsKKyAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlOworICAgICAgICBjb25z
dCB2ZXJib3NlID0gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgcHJp
bnQobmFtZSArICIgIiArIHJlc3VsdCArICIgIiArIChlbmQtc3RhcnQpICsgIm1zIik7CisgICAg
fQorCisKKyAgICB2YXIgc3BhcnNlU2V0ID0gbmV3IFNldDsKKyAgICBmb3IgKHZhciB4IG9mIFsx
MjMsIDEyMzAsIDEyMzAwLCAxMjMwMDAsIDIzNCwgMjM0MCwgMjM0MDBdKSB7CisgICAgICAgIHNw
YXJzZVNldC5hZGQoeCk7CisgICAgfQorCisgICAgYmVuY2goIlNwYXJzZSBTZXQgUHJvcGVydHkg
RXhpc3RlbmNlIiwgZnVuY3Rpb24ocykgeworICAgICAgICB2YXIgY291bnQgPSAwOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDVlNjsgKytpKQorICAgICAgICAgICAgaWYgKHMuaGFzKGkp
KQorICAgICAgICAgICAgICAgIGNvdW50KysKKyAgICAgICAgcmV0dXJuIGNvdW50OworICAgIH0s
IHNwYXJzZVNldCk7Cit9KSgpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvbWFwLWNzZS1jb3JyZWN0
bmVzcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tYXAtY3NlLWNvcnJlY3RuZXNz
LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvbWFwLWNzZS1jb3JyZWN0bmVzcy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACitmdW5jdGlvbiBhc3NlcnQoYikgewor
ICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgcmVzdWx0ISIpOworfQor
bm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdEhhcyhtYXAsIGtleSwgZikgeworICAg
IGxldCBmaXJzdCA9IG1hcC5oYXMoa2V5KTsKKyAgICBmKCk7CisgICAgbGV0IHNlY29uZCA9IG1h
cC5oYXMoa2V5KTsKKyAgICByZXR1cm4ge2ZpcnN0LCBzZWNvbmR9OworfQorbm9JbmxpbmUodGVz
dEhhcyk7CisKK2Z1bmN0aW9uIHRlc3RHZXQobWFwLCBrZXksIGYpIHsKKyAgICBsZXQgZmlyc3Qg
PSBtYXAuZ2V0KGtleSk7CisgICAgZigpOworICAgIGxldCBzZWNvbmQgPSBtYXAuZ2V0KGtleSk7
CisgICAgcmV0dXJuIHtmaXJzdCwgc2Vjb25kfTsKK30KK25vSW5saW5lKHRlc3RHZXQpOworCitm
dW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQga2V5ID0gaTsKKyAgICAgICAgbWFw
LnNldChrZXksIGtleSk7CisgICAgICAgIGxldCBmID0gKCkgPT4gbWFwLmRlbGV0ZShrZXkpOwor
ICAgICAgICBub0lubGluZShmKTsKKyAgICAgICAgbGV0IHtmaXJzdCwgc2Vjb25kfSA9IHRlc3RI
YXMobWFwLCBrZXksIGYpOworICAgICAgICBhc3NlcnQoZmlyc3QpOworICAgICAgICBhc3NlcnQo
IXNlY29uZCk7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsK
KyAgICAgICAgbGV0IGtleSA9IGk7CisgICAgICAgIG1hcC5zZXQoa2V5LCBrZXkpOworICAgICAg
ICBsZXQgZiA9ICgpID0+IHt9OworICAgICAgICBub0lubGluZShmKTsKKyAgICAgICAgbGV0IHtm
aXJzdCwgc2Vjb25kfSA9IHRlc3RIYXMobWFwLCBrZXksIGYpOworICAgICAgICBhc3NlcnQoZmly
c3QpOworICAgICAgICBhc3NlcnQoc2Vjb25kKTsKKyAgICB9CisKKworICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAgICAgbGV0IGtleSA9IGk7CisgICAgICAgIGxl
dCB2YWx1ZSA9IHt9OworICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworICAgICAgICBsZXQg
ZiA9ICgpID0+IG1hcC5kZWxldGUoa2V5KTsKKyAgICAgICAgbm9JbmxpbmUoZik7CisgICAgICAg
IGxldCB7Zmlyc3QsIHNlY29uZH0gPSB0ZXN0R2V0KG1hcCwga2V5LCBmKTsKKyAgICAgICAgYXNz
ZXJ0KGZpcnN0ID09PSB2YWx1ZSk7CisgICAgICAgIGFzc2VydChzZWNvbmQgPT09IHVuZGVmaW5l
ZCk7CisgICAgfQorICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAg
ICAgbGV0IGtleSA9IGk7CisgICAgICAgIGxldCB2YWx1ZSA9IHt9OworICAgICAgICBtYXAuc2V0
KGtleSwgdmFsdWUpOworICAgICAgICBsZXQgZiA9ICgpID0+IHt9OworICAgICAgICBub0lubGlu
ZShmKTsKKyAgICAgICAgbGV0IHtmaXJzdCwgc2Vjb25kfSA9IHRlc3RHZXQobWFwLCBrZXksIGYp
OworICAgICAgICBhc3NlcnQoZmlyc3QgPT09IHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0KHNlY29u
ZCA9PT0gdmFsdWUpOworICAgIH0KK30KK2ZvbygpOwpJbmRleDogSlNUZXN0cy9zdHJlc3MvbWFw
LWl0ZXJhdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL3N0cmVzcy9tYXAtaXRlcmF0aW9u
LmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdGlvbi5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDM5NSBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHJlc3VsdCEiKTsKK30KK25vSW5s
aW5lKGFzc2VydCk7CisKK2Z1bmN0aW9uIHRlc3QxKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFw
OworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaXRlciA9IG1hcFtTeW1ib2wuaXRlcmF0
b3JdKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQo
dmFsdWVbMF0gPT09IDIwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0gPT09IDMwKTsKKyAgICBhc3Nl
cnQoIWRvbmUpOworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2Vy
dChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxKCk7CisKK2Z1bmN0aW9uIHRlc3QyKCkgewor
ICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaXRl
ciA9IG1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVy
Lm5leHQoKTsKKyAgICBhc3NlcnQodmFsdWVbMF0gPT09IDIwKTsKKyAgICBhc3NlcnQodmFsdWVb
MV0gPT09IDMwKTsKKyAgICBhc3NlcnQoIWRvbmUpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKTsKKworICAgIG1hcC5zZXQoNDAsIDUwKTsKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0
ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRl
ZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MigpOwor
CitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0
KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwW1N5bWJv
bC5pdGVyYXRvcl0oKTsKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAg
IGFzc2VydCh2YWx1ZVswXSA9PT0gMjApOworICAgIGFzc2VydCh2YWx1ZVsxXSA9PT0gMzApOwor
ICAgIGFzc2VydCghZG9uZSk7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsK
KyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gNTApOworICAgIGFz
c2VydCh2YWx1ZVsxXSA9PT0gNjApOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworICAg
ICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAg
YXNzZXJ0KHZhbHVlWzBdID09PSAiZm9vIik7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSAiYmFy
Iik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9u
ZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MygpOworCitmdW5jdGlvbiB0ZXN0NCgpIHsKKyAgICBs
ZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwg
NjApOworICAgIGxldCBpdGVyID0gbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBsZXQge3Zh
bHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gMjApOwor
ICAgIGFzc2VydCh2YWx1ZVsxXSA9PT0gMzApOworICAgIGFzc2VydCghZG9uZSk7CisKKyAgICBt
YXAuY2xlYXIoKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFz
c2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3Q0KCk7CisKK2Z1bmN0aW9uIHRlc3Q1KCkg
eworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAu
c2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOworICAg
IGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KHZhbHVlWzBdID09
PSAyMCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNzZXJ0KCFkb25lKTsK
KworICAgIG1hcC5jbGVhcigpOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKworICAgICh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlWzBdID09PSA1MCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSA2MCk7CisKKyAgICAoe3Zh
bHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0
KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykK
KyAgICB0ZXN0NSgpOworIAorZnVuY3Rpb24gdGVzdDYoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBN
YXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIGxldCBpID0gMDsKKyAgICBmb3IgKGxldCBb
a2V5LCB2YWx1ZV0gb2YgbWFwKSB7CisgICAgICAgIG1hcC5kZWxldGUoa2V5KTsKKyAgICAgICAg
bWFwLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgaSsrOworICAgICAgICBpZiAoaSA9PT0gMTAw
MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhc3NlcnQoaSA9PT0gMTAwMCk7Cit9
Cit0ZXN0NigpOworCitmdW5jdGlvbiB0ZXN0NygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsK
KyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbGV0IGkgPSAwOworICAgIGZvciAobGV0IFtrZXks
IHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgbWFwLmNsZWFyKCk7CisgICAgICAgIG1hcC5zZXQo
a2V5LCB2YWx1ZSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgaWYgKGkgPT09IDEwMDApCisgICAg
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgYXNzZXJ0KGkgPT09IDEwMDApOworfQordGVzdDco
KTsKKworZnVuY3Rpb24gdGVzdDgoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFw
LnNldCgyMCwgMzApOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwOyBpKyspCisgICAgICAg
IG1hcC5zZXQoaSwgaSk7CisgICAgbGV0IGkgPSAwOworICAgIGZvciAobGV0IFtrZXksIHZhbHVl
XSBvZiBtYXApIHsKKyAgICAgICAgYXNzZXJ0KGtleSA9PT0gdmFsdWUpOworICAgICAgICBpKys7
CisgICAgICAgIGlmIChrZXkgPT09IDI1MCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBhc3NlcnQoaSA9PT0gMjUxKTsKK30KK3Rlc3Q4KCk7CisKK2Z1bmN0aW9uIHRlc3Q5KCkgewor
ICAgIGFzc2VydCgxLygtMCkgPT09IC1JbmZpbml0eSk7CisKKyAgICBsZXQgbWFwID0gbmV3IE1h
cDsKKyAgICBtYXAuc2V0KC0wLCA1MCk7IC8vIFdlIHNob3VsZCBub3JtYWxpemUgLTAgdG8gKzAg
aW4gdGhlIGtleS4KKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7CisgICAgICAg
IGFzc2VydCgxL2tleSA9PT0gSW5maW5pdHkpOworICAgIH0KKyAgICBhc3NlcnQobWFwLmdldCgw
LjApID09PSA1MCk7CisgICAgYXNzZXJ0KG1hcC5nZXQoMCkgPT09IDUwKTsKKyAgICBhc3NlcnQo
bWFwLmdldCgtMCkgPT09IDUwKTsKKyAgICBhc3NlcnQobWFwLmdldCgrMCkgPT09IDUwKTsKK30K
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDkoKTsKKworZnVuY3Rpb24g
dGVzdDEwKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoIm5lZ1plcm8i
LCAtMCk7IC8vIFdlIHNob3VsZCAqbm90KiBub3JtYWxpemUgLTAgdG8gKzAgaW4gdGhlIHZhbHVl
LgorICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgYXNzZXJ0KDEv
dmFsdWUgPT09IC1JbmZpbml0eSk7CisgICAgfQorfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7
IGkrKykKKyAgICB0ZXN0MTAoKTsKKworZnVuY3Rpb24gdGVzdDExKCkgeworICAgIGxldCBtYXAg
PSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaXRlciA9IG1hcC5rZXlz
KCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQoIWRv
bmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMjApOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0
KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAobGV0IGkg
PSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDExKCk7CisKK2Z1bmN0aW9uIHRlc3QxMigpIHsK
KyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbGV0IGl0
ZXIgPSBtYXAudmFsdWVzKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsK
KyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMzApOworCisgICAgKHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2Vy
dCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0
KCkpCisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsK
K30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDEyKCk7CisKK2Z1bmN0
aW9uIHRlc3QxMygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAz
MCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwLmtleXMoKTsKKyAg
ICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCghZG9uZSk7Cisg
ICAgYXNzZXJ0KHZhbHVlID09PSAyMCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKyAgICBtYXAuc2V0
KCJmb28iLCAiYmFyIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAg
ICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gImZvbyIpOworCisgICAgKHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0
KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykK
KyAgICB0ZXN0MTMoKTsKKworZnVuY3Rpb24gdGVzdDE0KCkgeworICAgIGxldCBtYXAgPSBuZXcg
TWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0
IGl0ZXIgPSBtYXAudmFsdWVzKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQo
KTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMzApOworCisgICAg
bWFwLmNsZWFyKCk7CisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworCisgICAgOyh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAg
YXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDE0KCk7CisKK2Z1bmN0aW9uIHRlc3Qx
NSgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAg
bWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwLmtleXMoKTsKKworICAgIGxldCB7
dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3Nl
cnQodmFsdWUgPT09IDIwKTsKKworICAgIDsoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQor
ICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSA1MCk7CisKKyAgICBtYXAu
Y2xlYXIoKTsKKworICAgIG1hcC5zZXQoImZvbyIsICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRv
bmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUg
PT09ICJmb28iKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNz
ZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAobGV0
IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDE1KCk7CisKK2Z1bmN0aW9uIHRlc3QxNigp
IHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbWFw
LnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwLnZhbHVlcygpOworCisgICAgbGV0IHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2Vy
dCh2YWx1ZSA9PT0gMzApOworCisgICAgOyh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisg
ICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDYwKTsKKworICAgIG1hcC5j
bGVhcigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9u
ZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9
PT0gImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3Nl
cnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQg
aSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTYoKTsKKworZnVuY3Rpb24gdGVzdDE3KCkg
eworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAu
c2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXAua2V5cygpOworCisgICAgbGV0IHt2YWx1
ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2
YWx1ZSA9PT0gMjApOworCisgICAgOyh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAg
YXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDUwKTsKKworICAgIG1hcC5jbGVh
cigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0g
ImZvbyIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQo
ZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgbWFwLnNldCgi
aGVsbG8iLCAid29ybGQiKTsKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAg
IGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxNygpOworCitmdW5jdGlvbiB0ZXN0
MTgoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAg
IG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcC52YWx1ZXMoKTsKKworICAgIGxl
dCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBh
c3NlcnQodmFsdWUgPT09IDMwKTsKKworICAgIDsoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgp
KQorICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSA2MCk7CisKKyAgICBt
YXAuY2xlYXIoKTsKKworICAgIG1hcC5zZXQoImZvbyIsICJiYXIiKTsKKworICAgICh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAg
YXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKKworICAgIG1h
cC5zZXQoImhlbGxvIiwgIndvcmxkIik7CisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQo
KSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOwor
fQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTgoKTsKSW5kZXg6IFBl
cmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFBlcmZvcm1hbmNlVGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMDUpCisrKyBQZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE2LTA5LTAxICBTYWFtIEJhcmF0
aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZh
c3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYw
OTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBF
UzZTYW1wbGVCZW5jaC9jbGkuanM6CisKIDIwMTYtMDgtMjMgIFNhYW0gQmFyYXRpICA8c2JhcmF0
aUBhcHBsZS5jb20+CiAKICAgICAgICAgSXQgc2hvdWxkIGJlIGVhc3kgdG8gcnVuIEVTNlNhbXBs
ZUJlbmNoIGZyb20gdGhlIGpzYyBzaGVsbApJbmRleDogUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1w
bGVCZW5jaC9jbGkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gUGVyZm9ybWFuY2VUZXN0cy9FUzZTYW1wbGVC
ZW5jaC9jbGkuanMJKHJldmlzaW9uIDIwNTMwNSkKKysrIFBlcmZvcm1hbmNlVGVzdHMvRVM2U2Ft
cGxlQmVuY2gvY2xpLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw0ICszMCw0IEBAIGxvYWQoImFp
cl9iZW5jaG1hcmsuanMiKTsKIGxvYWQoImJhc2ljX2JlbmNobWFyay5qcyIpOwogbG9hZCgiZ2x1
ZS5qcyIpOwogCi1kcml2ZXIuc3RhcnQoMTApOworZHJpdmVyLnN0YXJ0KDQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAwIEBACisyMDE2LTA5
LTAxICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgSlNN
YXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZhbXBzIGhvdyB3ZSBpbXBsZW1lbnQgTWFwIGFuZCBT
ZXQuIEl0IHVzZXMKKyAgICAgICAgYSBuZXcgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24uIFRoZSBo
YXNoIG1hcCB1c2VzIGxpbmVhcgorICAgICAgICBwcm9iaW5nIGFuZCBpdCB1c2VzIFdhbmcncyA2
NCBiaXQgaGFzaCBmdW5jdGlvbiBmb3IgSlNWYWx1ZXMKKyAgICAgICAgdGhhdCBhcmVuJ3Qgc3Ry
aW5ncy4gU3RyaW5ncyB1c2UgU3RyaW5nSW1wbCdzIGhhc2ggZnVuY3Rpb24uCisgICAgICAgIFRo
ZSByZWFzb24gSSB3YW50ZWQgdG8gcm9sbCBvdXIgb3duIEhhc2hUYWJsZSBpcyB0d29mb2xkOgor
ICAgICAgICBJIGRpZG4ndCB3YW50IHRvIGlubGluZSBXVEY6Okhhc2hNYXAncyBpbXBsZW1lbnRh
dGlvbiBpbnRvIG91cgorICAgICAgICBKSVQsIHNpbmNlIHRoYXQgc2VlbXMgZXJyb3IgcHJvbmUg
YW5kIHVubWFpbnRhaW5hYmxlLiBBbHNvLCBJIHdhbnRlZAorICAgICAgICBhIGRpZmZlcmVudCBz
dHJ1Y3R1cmUgZm9yIGhhc2ggbWFwIGJ1Y2tldHMgd2hlcmUgYnVja2V0cyBhbHNvIGV4aXN0IGlu
CisgICAgICAgIGEgbGlua2VkIGxpc3QuCisKKyAgICAgICAgVGhlIHJlYXNvbiBmb3IgbWFraW5n
IGJ1Y2tldHMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IGlzIHRoYXQgaXRlcmF0aW9uCisgICAgICAg
IGlzIG5vdyBzaW1wbGUuIEl0ZXJhdGlvbiB3b3JrcyBieSBqdXN0IHRyYXZlcnNpbmcgYSBsaW5r
ZWQgbGlzdC4KKyAgICAgICAgVGhpcyBkZXNpZ24gYWxzbyBhbGxvd3MgZm9yIGEgc2ltcGxlIGlt
cGxlbWVudGF0aW9uIHdoZW4gZG9pbmcgaXRlcmF0aW9uCisgICAgICAgIHdoaWxlIHRoZSBoYXNo
IHRhYmxlIGlzIG11dGF0aW5nLiBXaGVuZXZlciB3ZSByZW1vdmUgYSBidWNrZXQgZnJvbQorICAg
ICAgICB0aGUgaGFzaCB0YWJsZSwgaXQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0LCBtZWFuaW5n
IGl0ZW1zIGluIHRoZQorICAgICAgICBsaXN0IGRvbid0IHBvaW50IHRvIGl0LiBIb3dldmVyLCB0
aGUgcmVtb3ZlZCBidWNrZXQgd2lsbCBzdGlsbCBwb2ludAorICAgICAgICB0byB0aGluZ3MgdGhh
dCBhcmUgZWl0aGVyIGluIHRoZSBsaXN0LCBvciBoYXZlIGFsc28gYmVlbiByZW1vdmVkLgorICAg
ICAgICBlLmcsIGZyb20gYSByZW1vdmVkIGJ1Y2tldCwgeW91IGNhbiBhbHdheXMgZm9sbG93IHBv
aW50ZXJzIHVudGlsIHlvdQorICAgICAgICBlaXRoZXIgZmluZCBhbiBpdGVtIGluIHRoZSBsaXN0
LCBvciB5b3UgZmluZCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAgICAgICAgVGhpcyBpcyBhIHJl
YWxseSBuaWNlIHByb3BlcnR5IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBhIE1hcCBvciBTZXQKKyAg
ICAgICAgZG9lcyBub3QgbmVlZCB0byByZWFzb24gYWJvdXQgdGhlIGFsbCB0aGUgaXRlcmF0b3Jz
IHRoYXQgcG9pbnQKKyAgICAgICAgaW50byBpdHMgbGlzdC4gQWxzbywgd2hlbmV2ZXIgd2UgYWRk
IGl0ZW1zIHRvIHRoZSBNYXAgb3IgU2V0LCB3ZQorICAgICAgICBoaWphY2sgdGhlIHRhaWwgYXMg
dGhlIG5ldyBpdGVtLCBhbmQgbWFrZSB0aGUgbmV3IGl0ZW0gcG9pbnQgdG8gYSBuZXdseQorICAg
ICAgICBjcmVhdGVkIHRhaWwuIFRoaXMgbWVhbnMgdGhhdCBhbnkgaXRlcmF0b3IgdGhhdCBwb2lu
dGVkIHRvIHRoZSAidGFpbCIgbm93CisgICAgICAgIHBvaW50cyB0byBub24tdGFpbCBpdGVtcy4g
VGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYWRkaW5nIHRoaW5ncworICAgICAgICB0
byB0aGUgTWFwL1NldCB3aGlsZSBpdGVyYXRpbmcgZWFzeS4KKworICAgICAgICBJIGFsc28gbWFk
ZSBNYXAucHJvdG90eXBlLmdldCwgTWFwLnByb3RvdHlwZS5oYXMsIGFuZCBTZXQucHJvdG90eXBl
LmhhcworICAgICAgICBpbnRvIGludHJpbnNpY3MgaW4gdGhlIERGRy4gVGhlIElSIGNhbiBub3cg
cmVhc29uIGFib3V0IGhhc2ggbWFwCisgICAgICAgIG9wZXJhdGlvbnMgYW5kIGNhbiBldmVuIGRv
IENTRSBvdmVyIFdhbmcncyBoYXNoIGZ1bmN0aW9uLCBoYXNoIG1hcAorICAgICAgICBidWNrZXQg
bG9va3VwcywgaGFzaCBtYXAgYnVja2V0IGxvYWRzLCBhbmQgdGVzdGluZyBpZiBhIGtleSBpcyBp
bgorICAgICAgICB0aGUgaGFzaCB0YWJsZS4gVGhpcyBtYWtlcyBjb2RlIHBhdHRlcm5zIGZvciBN
YXAgbGlrZSBzbywgc3VwZXIgZmFzdAorICAgICAgICBpbiB0aGUgRlRMLCBzaW5jZSB3ZSB3aWxs
IG9ubHkgYmUgZG9pbmcgYSBzaW5nbGUgaGFzaCBhbmQgaGFzaCBidWNrZXQgbG9va3VwOgorCisg
ICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBnZXRLZXlJZlByZXNlbnQobWFwLCBrZXkpIHsK
KyAgICAgICAgICAgIGlmIChtYXAuaGFzKGtleSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1h
cC5nZXQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKworICAgICAgICBUaGlzIHBhdGNo
IGlzIHJvdWdobHkgYW4gOCUgc3BlZWR1cCBvbiBFUzZTYW1wbGVCZW5jaC4KKworICAgICAgICAq
IENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwOgorICAg
ICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgorICAgICAgICAqIGJ5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlSW50cmluc2ljQ2FsbCk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dD
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdFZGdl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2hpZnQpOgorICAgICAgICAoSlNDOjpERkc6
OkVkZ2U6Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
SGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAg
ICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9E
RkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6CisgICAgICAgIChK
U0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5k
LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1Vz
ZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKEpT
Qzo6REZHOjppc0NlbGwpOgorICAgICAgICAqIGZ0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1hcEhhc2gpOgorICAgICAgICAo
SlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0TWFwQnVja2V0KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZUxvYWRGcm9tSlNNYXBCdWNr
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlSXNOb25F
bXB0eU1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxv
d01hcE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1Nl
dE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd01hcEJ1
Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZSk6
CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZU1hcE9iamVj
dCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNwZWN1bGF0ZVNldE9i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnNldE1hcEJ1Y2tl
dCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1JlZ0V4cE9iamVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd1N0
b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpz
cGVjdWxhdGVSZWdFeHBPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6
TG93ZXJERkdUb0IzOjpzZXRTdG9yYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0
SGFzaCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJsZU9iamVjdCk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBwYXJzZXIvTW9kdWxl
QW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVBbmFseXplcjo6TW9kdWxlQW5hbHl6
ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6
Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3RvcmUpOgorICAgICAg
ICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6Okhhc2hNYXBC
dWNrZXQ6OnNlbGVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmNyZWF0ZSk6Cisg
ICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6Okhhc2hNYXBCdWNrZXQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwQnVja2V0OjpzZXROZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6
c2V0UHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldEtleSk6CisgICAgICAg
IChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldFZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1
Y2tldDo6a2V5KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6dmFsdWUpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVja2V0OjpuZXh0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tl
dDo6cHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OmRlbGV0ZWQpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVja2V0OjpzZXREZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEJ1Y2tldDo6b2Zmc2V0T2ZLZXkpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpvZmZz
ZXRPZlZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpidWZmZXIpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjphcmVLZXlzRXF1YWwpOgorICAg
ICAgICAoSlNDOjpub3JtYWxpemVNYXBLZXkpOgorICAgICAgICAoSlNDOjpqc01hcEhhc2gpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6c2VsZWN0U3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJ
bXBsOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6SGFzaE1hcEltcGwpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmVtcHR5
VmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNFbXB0eSk6CisgICAgICAgIChK
U0M6Okhhc2hNYXBJbXBsOjpkZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1w
bDo6aXNEZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXQpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcElt
cGw6Omhhcyk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjphZGQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnNpemUp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpIYXNo
TWFwSW1wbDo6YnVmZmVyU2l6ZUluQnl0ZXMpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6
b2Zmc2V0T2ZCdWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6b2Zmc2V0T2ZDYXBh
Y2l0eSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpoZWFkKToKKyAgICAgICAgKEpTQzo6
SGFzaE1hcEltcGw6OnRhaWwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YXBwcm94aW1h
dGVTaXplKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmRCdWNrZXRBbHJlYWR5SGFz
aGVkQW5kTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpyZWhhc2gpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6bWFrZUFuZFNldE5ld0J1ZmZlcik6CisgICAgICAg
ICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoK
KyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OnNh
bWVWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAgKiBydW50aW1lL0pTTWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU01hcDo6ZXN0aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjp2
aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OmNvcHlCYWNraW5n
U3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6aGFzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXA6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6
Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpy
ZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXAuaDoKKyAgICAgICAgKEpT
Qzo6SlNNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpjcmVhdGUp
OgorICAgICAgICAoSlNDOjpKU01hcDo6Z2V0KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OnNldCk6
CisgICAgICAgIChKU0M6OkpTTWFwOjpKU01hcCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRy
eTo6a2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5Ojp2YWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlzaXRDaGlsZHJlbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRWYWx1ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmNsb25lKToKKyAgICAgICAgKiBydW50aW1l
L0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6YWR2YW5jZUl0
ZXIpOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKEpTQzo6
SlNNYXBJdGVyYXRvcjo6bmV4dEtleVZhbHVlKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRv
cjo6SlNNYXBJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OnNldEl0ZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6ZmluaXNoKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6aXRlcmF0b3JEYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVM
b2FkZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVy
Lmg6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVhdGUpOgorICAgICAgICAqIHJ1
bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6
ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaDoKKyAg
ICAgICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9K
U1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95KTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OmVzdGltYXRlZFNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U1NldDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0Ojpjb3B5
QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6Omhhcyk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpzaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZXQ6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpjbGVhcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1
bnRpbWUvSlNTZXQuaDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkpTU2V0OjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU1NldDo6YWRkKToK
KyAgICAgICAgKEpTQzo6SlNTZXQ6OkpTU2V0KToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5
OjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXkpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldFZhbHVlKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6Y2xvbmUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjphZHZhbmNlSXRl
cik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoSlNDOjpK
U1NldEl0ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRv
cjo6c2V0SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpmaW5pc2gpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjppdGVyYXRvckRhdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAgICAgICogcnVudGltZS9NYXBC
YXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTxIYXNoTWFwQnVja2V0VHlw
ZT46OmVzdGltYXRlZFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQmFzZS5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6TWFwQmFzZTo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6Omhh
cyk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6TWFwQmFz
ZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluZEJ1Y2tldCk6CisgICAgICAg
IChKU0M6Ok1hcEJhc2U6Om9mZnNldE9mSGFzaE1hcEltcGwpOgorICAgICAgICAoSlNDOjpNYXBC
YXNlOjppbXBsKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpNYXBCYXNlOjpNYXBCYXNlKToKKyAgICAgICAgKiBydW50aW1lL01hcENvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFwKToKKyAgICAgICAgKiBydW50
aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQ
cm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9NYXBQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6Z2V0TWFwKToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJc01hcCk6CisgICAgICAgIChK
U0M6OnByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KToKKyAgICAgICAgKiBydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OnNhbWVWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoKKyAgICAgICAgKiBydW50aW1l
L1NldENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0U2V0KToKKyAgICAg
ICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U2V0
SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9TZXRQcm90b3R5
cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6Z2V0U2V0KToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNTZXRJdGVyYXRv
ck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0p
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNi0wOS0wMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2U6
Omluc2VydE9TUkhpbnRzRm9yVXBkYXRlKCkgZmFpbHMgdG8gZW1pdCB1cGRhdGVkIGhpbnRzIGlu
IHNvbWUgY2FzZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlz
aW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VT
CiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jcHAKICAgICBydW50aW1l
L0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRlclNldHRlci5jcHAKKyAg
ICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKICAg
ICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0luZmVycmVkVHlwZS5jcHAK
QEAgLTc1Miw2ICs3NTMsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIHJ1bnRp
bWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0ZXJhbFBhcnNlci5jcHAK
ICAgICBydW50aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJhc2UuY3BwCiAgICAgcnVu
dGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBl
LmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAwLDEwICsxMzAwLDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRN
YXRoSUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFDNEVFRDVDMDBEMTNBRjMg
LyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3JpZ2lu
TWFwLmNwcCAqLzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYzIC8qIFBDVG9Db2RlT3Jp
Z2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OTVCMTk5NzFENzhCRTM1
MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi87
IH07CisJCTc5NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NjFENzhCRTM1MDAyNjJG
QTAgLyogTWFwQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTY0NjU2ODFCOTUyRkYw
MDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExl
eGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9i
YWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxF
bnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5OUVGN0MzMUM1NkVE
OTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLzsgfTsKKwkJ
NzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIg
LyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5QTIyODMzMUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9OwogCQk3OUEyMjgzNjFEMzVE
NzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9m
aWxlLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxp
bmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUzMywxMCAr
MzUzNywxNCBAQAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyogSklUTWF0aElDLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmln
aW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUENUb0NvZGVP
cmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0ODFDNEVF
RDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1l
bnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52
aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk5RUY3QzMxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENUb09yaWdpbk1hcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyog
SGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGFz
aE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RTFENzY4
NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBMjI4
MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmlsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThDNzMgLyogSklUTWF0aElD
Rm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUTWF0aElDRm9y
d2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU3NzQsNiArNTc4Miw4IEBA
CiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCAqLywKIAkJCQlC
QzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNwcCAqLywKIAkJCQlCQzMz
N0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8sCisJCQkJNzlBMDkwN0Qx
RDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJCQk3OUEwOTA3RTFENzY4
NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNBMzQ5RDAzOEFFODBGMDA4
NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEwMzhBRTdDNjAwODYzNUNF
IC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFCMDBBMzgzRDAgLyogSWRl
bnRpZmllcklubGluZXMuaCAqLywKQEAgLTU5ODIsNiArNTk5Miw4IEBACiAJCQkJQTdFMkVBNjkw
RkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJCQlGNjkyQTg2ODAyNTU1
OTdEMDFGRjYwRjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2OTAyNTU1OTdEMDFGRjYw
RjcgLyogTG9va3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJh
c2UuY3BwICovLAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi8s
CiAJCQkJQTcwMDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCAqLywK
IAkJCQlBNzAwODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCAqLywKIAkJ
CQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICovLApAQCAtNzI3MSw2ICs3
MjgzLDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyogQ2FsbEVkZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVT
aHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgxRDc4QkUzNTAwMjYyRkEw
IC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3MUI4NEZCNEEwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQjExNEJD
RjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMy
OUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAg
LTc0MzcsNiArNzQ1MCw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAwNzNDMkJDIC8qIERGR0Zs
dXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJERDgxNTFBQjNEOEJFMDBC
QkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTc5QTA5MDgwMUQ3
Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2OUND
ODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5oIGluIEhl
YWRlcnMgKi8sCkBAIC05MTU3LDYgKzkxNzEsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVG
OTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2
NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBB
MUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJl
cG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQxQzFGNjZBQTAwQ0Y2NTY0
IC8qIEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjcxODdERkRFQzAwODNC
Njg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTIwMSw2
ICs5MjE2LDcgQEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0MgLyogRnVuY3Rpb25IYXNF
eGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJGRjJCMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
QzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZp
dHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQyRjE1QThEQ0UwMDA4RjM2
M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUg
IlNwZWN1bGF0ZWRUeXBlLmgiCiAKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVu
Y3Rpb24uaCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNp
bmNsdWRlICJKU1NldC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IlN0cmluZ09iamVjdC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtMzQ2LDYgKzM0
OCwxMiBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBp
ZiAoY2xhc3NJbmZvID09IFJlZ0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3Bl
Y1JlZ0V4cE9iamVjdDsKKworICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAg
ICAgICAgcmV0dXJuIFNwZWNNYXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0
OjppbmZvKCkpCisgICAgICAgIHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChj
bGFzc0luZm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1
cm4gU3BlY0Z1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0
MSArMzksNDMgQEAgY2xhc3MgU3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0
ZWRUeXBlOwogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAg
ICAgPSAwOyAvLyBXZSBkb24ndCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgSlNGaW5hbE9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
QXJyYXkgICAgICAgICAgICAgID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJh
eS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0g
MXUgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIEludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUg
PDwgNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJj
bGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAg
ICAgPSAxdSA8PCA2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2Yg
aXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xh
bXBlZEFycmF5ICA9IDF1IDw8IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBh
biBVaW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBVaW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAx
dSA8PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMg
c3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3Qg
ICAgICAgID0gMXVsbCA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxs
IDw8IDE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bmN0aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgSlNGdW5jdGlvbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50
OEFycmF5ICAgICAgICAgID0gMXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFy
cmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlw
ZSBTcGVjSW50MTZBcnJheSAgICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkg
YW4gSW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0ludDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nl
cy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0g
MXVsbCA8PCA3OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25l
IG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50
MTZBcnJheSAgICAgICAgPSAxdWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZB
cnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIFVpbnQzMkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQn
cyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8
PCAxMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3Vi
Y2xhc3Nlcy4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcg
ICAgID0gU3BlY0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBT
cGVjVWludDhBcnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8
IFNwZWNVaW50MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owot
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8
PCAxMjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1JlZ0V4cE9iamVjdCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBSZWdFeHBPYmplY3QgKGFuZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8
IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwg
SlNBcnJheSwgb3IgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
T2JqZWN0ICAgICAgICAgICAgID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1
bmN0aW9uIHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNT
Y29wZWRBcmd1bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNw
ZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBv
ZiBvYmplY3QgcHJlZGljdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3Ry
aW5nSWRlbnQgICAgICAgID0gMXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5n
LCBhbmQgaXQncyBhbiBpZGVudGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNTdHJpbmdWYXIgICAgICAgICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNT
dHJpbmcsIGFuZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNTY29wZWRBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBTY29wZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNTdHJpbmdPYmplY3QgICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBTdHJpbmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9i
amVjdCAgICAgICA9IDF1bGwgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVj
dCAoYW5kIG5vdCBhbnkgc3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjTWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQn
cyBkZWZpbml0ZWx5IE1hcCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwg
PDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNs
YXNzPyBGSVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVy
ICAgICAgICA9IDF1bGwgPDwgMTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5v
dCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBT
cGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0
QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVj
UmVnRXhwT2JqZWN0IHwgU3BlY01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0
T3RoZXI7IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0
IHByZWRpY3Rpb24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50
ICAgICAgICA9IDF1bGwgPDwgMTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQg
aXQncyBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdWYXIgICAgICAgICAgPSAxdWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmlu
ZywgYW5kIGl0J3Mgbm90IGFuIGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY1N0cmluZyAgICAgICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdW
YXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNTeW1ib2wgICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgU3ltYm9sLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIg
ICAgICAgICAgPSAxdSA8PCAyMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3Qg
YSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBh
IFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0
ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1
bGwgPDwgMjE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVm
aW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0
IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY0NlbGwgICAgICAgICAgICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5
bWJvbCB8IFNwZWNDZWxsT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxs
IDw8IDIzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwg
PDwgMjQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4g
MCBvciAxLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAg
ICAgPSBTcGVjQm9vbEludDMyIHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5
IGFuIEludDMyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAg
ICAgICAgPSAxdSA8PCAyMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRl
bmQgaXQgdG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8
PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5i
b3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNw
ZWNJbnQ1Mk9ubHk7IC8vIEl0J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50
IGFyaXRobWV0aWMgb24uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFz
RG91YmxlICAgICA9IDF1IDw8IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0
J3MgaW5zaWRlIGEgZG91YmxlLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25J
bnRBc0RvdWJsZSAgICAgPSAxdSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1
MiBidXQgaXQncyBhIHJlYWwgbnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3
OyAvLyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIg
YW5kIGl0J3MgYSBkb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJs
ZVJlYWwgICAgICAgICA9IFNwZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgTmFOIHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxs
IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUu
IHB1cmUpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4g
ICAgPSAxdWxsIDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUg
dG8gdGFnIChpLmUuIGltcHVyZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Rv
dWJsZU5hTiAgICAgICAgICA9IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5h
TjsgLy8gSXQncyBkZWZpbml0ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3Bl
Y0RvdWJsZVB1cmVOYU47IC8vIEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUs
IGJ1dCBpdCdzIGRlZmluaXRlbHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bGxEb3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0Rv
dWJsZU5hTjsgLy8gSXQncyBlaXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgx
LDEyICs4MywxMiBAQCBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNB
bnlJbnQgfCBTcGVjRG91YmxlUmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3Vi
bGVSZWFsLCBvciBhIEludDUyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRl
Y29kZU51bWJlciAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJ
dCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJl
IGFuIGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1i
ZXIgICAgICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIg
YW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVy
ZSBOYU4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAg
ICA9IDF1IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQn
cyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3Ro
ZXIgICAgICAgICAgICAgID0gMXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBO
dWxsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAg
ICAgICAgICAgICAgID0gU3BlY0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVs
eSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVj
b2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNl
cHQgZm9yIFNwZWNJbnQ1Mk9ubHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBT
cGVjU3ltYm9sIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5v
bi1PYmplY3QgSlNWYWx1ZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkg
ICAgICAgICAgICAgID0gMXUgPDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1
ZSBtYXJrZXIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAg
ICAgICA9IDF1bGwgPDwgMzI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJr
ZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9
IFNwZWNIZWFwVG9wIHwgU3BlY0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwg
ZXhjZXB0IGZvciBTcGVjSW50NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNw
b25kcyB0byB3aGF0IGNvdWxkIGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29k
ZVRvcCB8IFNwZWNGdWxsTnVtYmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29k
ZSBjb3VsZCBzZWUgcGx1cyBleG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
OTc3LDYgKzk3NywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAg
IGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVh
cFRvcCgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGxPdGhlcik7CisgICAgICAg
IGJyZWFrOworCisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwogICAgIGNhc2Ug
SXNFbXB0eToKICAgICBjYXNlIElzSlNBcnJheToKICAgICBjYXNlIElzVW5kZWZpbmVkOgpAQCAt
Mjg4Myw3ICsyODk5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVuc2ln
bmVkIGluZGV4SW5CbG9jaykKIHsKICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5h
dChpbmRleEluQmxvY2spOwotICAgIAorCiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVj
dXRlRWRnZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywg
bm9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwz
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldElu
dHJpbnNpYzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAg
ICAgICAgTm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lz
dGVyT2Zmc2V0KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JB
cmd1bWVudCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9H
cmFwaChNYXBIYXNoLCBrZXkpOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdl
dE1hcEJ1Y2tldCwgRWRnZShtYXAsIE1hcE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNo
KSk7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tl
dCwgT3BJbmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgY2FzZSBKU1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFw
SGFzSW50cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAh
PSAyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGluc2VydENoZWNrcygp
OworICAgICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgwLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFz
aCA9IGFkZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0g
aW50cmluc2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0
VXNlOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJ
bmZvKDApLCBFZGdlKG1hcE9yU2V0LCB1c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsK
KyAgICAgICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBi
dWNrZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1
bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQzLDYgKzEyNDMsMjcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9n
U2hhZG93Q2hpY2tlblRhaWw6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJl
dHVybjsKKworICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFk
KE1pc2NGaWVsZHMpOworICAgICAgICBFZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7Cisg
ICAgICAgIEVkZ2UmIGtleUVkZ2UgPSBub2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBM
b2NhdGlvbihNYXBCdWNrZXRMb2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGtleUVkZ2UpLCBMYXp5
Tm9kZShub2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIGJ1
Y2tldEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01h
cEdldExvYywgTWlzY0ZpZWxkcywgYnVja2V0RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAg
IHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTWFwSGFzTG9jLCBN
aXNjRmllbGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0
dXJuOwogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSwxMCBAQCBib29sIGRv
ZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAg
ICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6
CisgICAgY2FzZSBNYXBIYXNoOgorICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAgICAgY2Fz
ZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgIGNhc2Ug
Q2hlY2tUaWVyVXBJbkxvb3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Vk
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAko
cmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBBZGphY2VuY3lMaXN0OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RhdGlj
IHVpbnQzMl90IHNoaWZ0KCkgeyByZXR1cm4gNzsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgdWlu
dDMyX3Qgc2hpZnQoKSB7IHJldHVybiA4OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBt
YWtlV29yZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3Rh
dHVzLCBLaWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewpAQCAtMTk3LDggKzE5NywyMSBAQCBw
cml2YXRlOgogICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4obm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUg
Pj4gc2hpZnQoKSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBB
U1NFUlQodXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFT
U0VSVCgoc3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRl
ZFZhbHVlIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpk
b2VzS2lsbChraWxsU3RhdHVzKSA8PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjpp
c1Byb3ZlZChwcm9vZlN0YXR1cykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAyKSA8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KDEpIDw8IHNoaWZ0KCkpLCAiV2UgcmVseSBvbiB0aGlzIGJlaW5nIHRydWUgdG8gbm90IGNsb2Ji
ZXIgdGhlIG5vZGUgcG9pbnRlci4iKTsKKyAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHNoaWZ0
ZWRWYWx1ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6
ZG9lc0tpbGwoa2lsbFN0YXR1cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6
aXNQcm92ZWQocHJvb2ZTdGF0dXMpKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIHVuaW9uIFUgeworICAgICAgICAgICAgICAgIFUoKSB7IHdvcmQgPSAwOyB9
CisgICAgICAgICAgICAgICAgdWludHB0cl90IHdvcmQ7CisgICAgICAgICAgICAgICAgRWRnZSBl
ZGdlOworICAgICAgICAgICAgfSB1OworICAgICAgICAgICAgdS53b3JkID0gcmVzdWx0OworICAg
ICAgICAgICAgQVNTRVJUKHUuZWRnZS51c2VLaW5kVW5jaGVja2VkKCkgPT0gdXNlS2luZCk7Cisg
ICAgICAgICAgICBBU1NFUlQodS5lZGdlLm5vZGUoKSA9PSBub2RlKTsKKyAgICAgICAgICAgIEFT
U0VSVCh1LmVkZ2UucHJvb2ZTdGF0dXNVbmNoZWNrZWQoKSA9PSBwcm9vZlN0YXR1cyk7CisgICAg
ICAgICAgICBBU1NFUlQodS5lZGdlLmtpbGxTdGF0dXNVbmNoZWNrZWQoKSA9PSBraWxsU3RhdHVz
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICNlbHNl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NDUsNiArMTU0NSwyOSBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8TWFwT2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2Jq
ZWN0VXNlKQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8U2V0T2JqZWN0VXNlPihub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQzKCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0Ogor
ICAgICAgICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAg
ICAgICAgIGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIE1hcEhhc2g6CisgICAgICAgICAgICBmaXhFZGdlPFVu
dHlwZWRVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8g
ZW5zdXJlIHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rl
cy4KICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQzLDYgKzE0MywxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
TG9jCiAgICAgY2FzZSBSZWdFeHBPYmplY3RMYXN0SW5kZXhMb2M6CiAgICAgICAgIG91dC5wcmlu
dCgiUmVnRXhwT2JqZWN0TGFzdEluZGV4TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1hcEJ1Y2tldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNYXBCdWNrZXRMb2MiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNN
YXBHZXRMb2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwSGFzTG9jOgorICAgICAg
ICBvdXQucHJpbnQoIk1hcEhhc0xvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAog
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDcgKzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAg
ICAgVHlwZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2MsCi0gICAgU3RhY2tQYXls
b2FkTG9jCisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAgIE1hcEJ1Y2tldExvYywKKyAgICBKU01h
cEdldExvYywKKyAgICBNYXBIYXNMb2MKIH07CiAKIGNsYXNzIEhlYXBMb2NhdGlvbiB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MTks
NiArMTQxOSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgICAg
ICBjYXNlIFN0cmluZ1JlcGxhY2VSZWdFeHA6CiAgICAgICAgIGNhc2UgVG9OdW1iZXI6CisgICAg
ICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODgsNyArMzg4LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhHZXRQcm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMp
IFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1l
LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oVG9JbmRleFN0
cmluZywgTm9kZVJlc3VsdEpTKQorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRK
UykgXAorICAgIC8qIEhhc2hpbmcgbm9kZXMgZm9yIEpTTWFwIGFuZCBKU1NldCAqLyBcCisgICAg
bWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oR2V0TWFwQnVja2V0
LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhMb2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVz
dWx0SlMpIFwKKyAgICBtYWNybyhJc05vbkVtcHR5TWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVh
bikgXAogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVzIGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5n
IGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFuZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50
IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBhY2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2sp
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlv
bnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01h
cC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0x
ODAzLDYgKzE4MDUsMzQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNW
YQogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1Zh
bHVlOjpkZWNvZGUodmFsdWUpLCBzbG90KTsKIH0KIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKworICAgIHJldHVybiBqc01hcEhhc2goZXhlYywgdm0sIG5vcm1hbGl6
ZU1hcEtleShKU1ZhbHVlOjpkZWNvZGUoaW5wdXQpKSk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1h
cCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhl
Yy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Cisg
ICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5k
QnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1Y2tl
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2Vy
KCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNT
ZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsK
KyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpi
dWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGlt
aXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgT1NSRXhpdEJhc2UqIGV4aXQpCiB7CiAg
ICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUgdGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBo
ZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4ndApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiAr
MTQyLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmlu
Z0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNT
dHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3Rl
clN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsKIAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgaW5wdXQpOworSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0Nl
bGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90KTsKKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09i
amVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxsKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlND
ZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzExLDYgKzcxMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVW
YXI6CiAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3VtZW50czoKKyAgICAgICAgY2FzZSBMb2FkRnJv
bUpTTWFwQnVja2V0OgogICAgICAgICBjYXNlIFRvTnVtYmVyOiB7CiAgICAgICAgICAgICBzZXRQ
cmVkaWN0aW9uKG1fY3VycmVudE5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC03NDEsNiArNzQyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAgIHNldFBy
ZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoK
KyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0Jvb2xlYW4pOworICAgICAgICAgICAgYnJl
YWs7CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVuZ3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVk
aWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMjA1MzA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBjYXNlIEZ1bmN0aW9u
VXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICBjYXNlIFJlZ0V4cE9i
amVjdFVzZToKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgU2V0T2Jq
ZWN0VXNlOgogICAgICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIGNhc2UgU3Ry
aW5nSWRlbnRVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nVXNlOgpAQCAtMzU1LDYgKzM1NywxMCBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXRE
eW5hbWljVmFyOgogICAgIGNhc2UgUHV0RHluYW1pY1ZhcjoKICAgICBjYXNlIFJlc29sdmVTY29w
ZToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBM
b2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJvdHRvbVZhbHVlOgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIK
ICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgogI2lu
Y2x1ZGUgIkpTRW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgpAQCAtNDcyMCw2
ICs0NzIxLDgyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBNYXBIYXNoOiB7CisgICAgICAgIEpTVmFs
dWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBKU1ZhbHVl
UmVncyBpbnB1dFJlZ3MgPSBpbnB1dC5qc1ZhbHVlUmVncygpOworCisgICAgICAgIEdQUkZsdXNo
ZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQUiwgaW5wdXRSZWdzKTsKKyAgICAgICAg
bV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBu
b2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6IHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAg
ICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAg
ICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVn
IG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgSlNWYWx1ZVJlZ3Mga2V5UmVncyA9IGtleS5q
c1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxh
dGVNYXBPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVj
dWxhdGVTZXRPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBP
YmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1
Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCwgcmVz
dWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9hZCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdFRhZyh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0
LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQu
Z3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisK
KyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCBKU1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJl
c3VsdFBheWxvYWRHUFIpKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQuanVtcCgpOworCisg
ICAgICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgZG9u
ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJ
c05vbkVtcHR5TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tl
dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CisKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJl
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCks
IHJlc3VsdEdQUik7CisgICAgICAgIGJvb2xlYW5SZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgi
CiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgog
I2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgorI2luY2x1ZGUgIkpTU2V0Lmgi
CiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJh
bWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01vZGUuaCIKQEAgLTQ2MTUsNiArNDYxNywx
NjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKKyAgICBjYXNlIE1hcEhhc2g6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBH
UFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzdHJhaWdodEhhc2g7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBhdXRvIGlzTm90Q2VsbCA9IG1f
aml0LmJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFu
Y2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5w
dXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5n
VHlwZSkpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhp
bnB1dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlc3VsdEdQUik7CisgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJv
LCByZXN1bHRHUFIpKTsKKyAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1wbDo6ZmxhZ3NPZmZzZXQoKSksIHJlc3VsdEdQUik7Cisg
ICAgICAgIG1faml0LnVyc2hpZnQ2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDYpLCBy
ZXN1bHRHUFIpOworICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9q
aXQuanVtcCgpKTsKKworICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICBz
dHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSk7Cisg
ICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVn
cyhpbnB1dEdQUikpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisK
KyAgICAgICAgc3RyYWlnaHRIYXNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShp
bnB1dEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQuV2FuZ3NJbnQ2NEhhc2gocmVzdWx0
R1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAg
ICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwg
cmVzdWx0R1BSLCBpbnB1dEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKworICAgICAgICBkb25l
LmxpbmsoJm1faml0KTsKKyAgICAgICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIFNwZWN1bGF0
ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsKKyAgICAgICAgR1BSVGVt
cG9yYXJ5IG1hc2sodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBpbmRleCh0aGlzKTsKKyAg
ICAgICAgR1BSVGVtcG9yYXJ5IGJ1ZmZlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IGJ1
Y2tldCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAg
ICBHUFJSZWcgaGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXBHUFIgPSBt
YXAuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBtYXNrR1BSID0gbWFzay5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIGluZGV4R1BSID0gaW5kZXguZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWZmZXJHUFIg
PSBidWZmZXIuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7
CisgICAgICAgIEdQUlJlZyBrZXlHUFIgPSBrZXkuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtp
bmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9k
ZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVz
ZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qo
bm9kZS0+Y2hpbGQxKCksIG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtYXBHUFIsIG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBP
YmplY3RVc2UgPyBKU01hcDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpIDogSlNTZXQ6Om9mZnNldE9m
SGFzaE1hcEltcGwoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZDYXBhY2l0eSgpKSwgbWFza0dQUik7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVm
ZmVyKCkpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5zdWIzMihUcnVzdGVkSW1tMzIoMSks
IG1hc2tHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKGhhc2hHUFIsIGluZGV4R1BSKTsKKworICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6TGFiZWwgbG9vcCA9IG1faml0LmxhYmVsKCk7CisgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3Qgc2xvd1BhdGhDYXNlczsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IGxvb3BBcm91bmQ7CisKKyAgICAgICAgbV9qaXQuYW5kMzIobWFza0dQUiwgaW5kZXhHUFIpOwor
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoYnVmZmVyR1BS
LCBpbmRleEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQpLCBidWNrZXRHUFIpOworICAg
ICAgICBtX2ppdC5tb3ZlKGJ1Y2tldEdQUiwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBub3RQ
cmVzZW50SW5UYWJsZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSk7CisgICAgICAgIGxv
b3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIAor
ICAgICAgICAgICAgYnVja2V0R1BSLCBUcnVzdGVkSW1tUHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkpKSk7CisKKyAgICAg
ICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT46Om9mZnNldE9mS2V5KCkpLCBidWNrZXRHUFIp
OworCisgICAgICAgIC8vIFBlcmZvcm0gT2JqZWN0LmlzKCkKKyAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBidWNrZXRHUFIsIGtleUdQUikp
OyAvLyBUaGV5J3JlIGRlZmluaXRlbHkgdGhlIHNhbWUgdmFsdWUsIHdlIGZvdW5kIHRoZSBidWNr
ZXQgd2Ugd2VyZSBsb29raW5nIGZvciEKKyAgICAgICAgYXV0byBvbmVJc250Q2VsbCA9IG1faml0
LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhidWNrZXRHUFIpKTsKKyAgICAgICAgLy8gZmly
c3QgaXMgYSBjZWxsIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5j
aElmTm90Q2VsbChKU1ZhbHVlUmVncyhrZXlHUFIpKSk7CisgICAgICAgIC8vIEJvdGggYXJlIGNl
bGxzIGhlcmUuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaDgoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3MoYnVja2V0
R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ1R5
cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZyBoZXJlLgorICAgICAgICBz
bG93UGF0aENhc2VzLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpFcXVhbCwKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGtleUdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5
cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICAvLyBUaGUg
Zmlyc3QgaXMgYSBzdHJpbmcsIGJ1dCB0aGUgc2Vjb25kIGlzIG5vdCwgd2UgY29udGludWUgdG8g
bG9vcCBhcm91bmQuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisK
KyAgICAgICAgb25lSXNudENlbGwubGluaygmbV9qaXQpOworICAgICAgICAvLyBXZSd2ZSBhbHJl
YWR5IGRvbmUgYSA2NC1iaXQgY29tcGFyZSBhdCB0aGlzIHBvaW50LCBzbyBpZiBvbmUgaXMgbm90
IGEgbnVtYmVyLCB0aGV5J3JlIGRlZmluaXRlbHkgbm90IGVxdWFsLgorICAgICAgICBsb29wQXJv
dW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihidWNrZXRHUFIpKTsKKyAgICAgICAg
bG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoa2V5R1BSKSk7CisgICAg
ICAgIC8vIEJvdGggYXJlIGRlZmluaXRlbHkgbnVtYmVycy4gSWYgd2Ugc2VlIGEgZG91YmxlLCB3
ZSBnbyB0byB0aGUgc2xvdyBwYXRoLgorICAgICAgICBzbG93UGF0aENhc2VzLmFwcGVuZChtX2pp
dC5icmFuY2hJZk5vdEludDMyKGJ1Y2tldEdQUikpOworICAgICAgICBzbG93UGF0aENhc2VzLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdEludDMyKGtleUdQUikpOworICAgICAgICAKKyAgICAgICAg
bG9vcEFyb3VuZC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5qdW1wKCkubGlua1RvKGxvb3AsICZtX2pp
dCk7CisKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5saW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVu
dFNwaWxsQWxsUmVnaXN0ZXJzKGluZGV4R1BSKTsKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQ
Uik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNT
ZXRGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAg
ICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAg
ICAgbm90UHJlc2VudEluVGFibGUubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW1QdHIobnVsbHB0ciksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9q
aXQpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgTG9hZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBi
dWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAgICAgICBhdXRvIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKSksIHJlc3VsdEdQUik7CisgICAgICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKworICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBidWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBH
UFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBi
dWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisK
KyAgICAgICAgbV9qaXQuY29tcGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1Y2tl
dEdQUiwgVHJ1c3RlZEltbTMyKDApLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0R1BSKTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRHUFIsIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOworICAgICAgICBicmVhazsK
KyAgICB9CisKICAgICBjYXNlIElzT2JqZWN0OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBSZXVzZSwgdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzgxLDYgKzczODEsMzQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlUmVnRXhwT2Jq
ZQogICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBvcGVyYW5kLmdwcigpKTsKIH0KIAor
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UgZWRnZSwgR1BSUmVn
IGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwgU3BlY01hcE9iamVj
dCwgSlNNYXBUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlTWFwT2Jq
ZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNNYXBP
YmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcGVy
YW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCBvcGVyYW5kLmdw
cigpKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2Ug
ZWRnZSwgR1BSUmVnIGNlbGwpCit7CisgICAgc3BlY3VsYXRlQ2VsbFR5cGUoZWRnZSwgY2VsbCwg
U3BlY1NldE9iamVjdCwgSlNTZXRUeXBlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSkKK3sKKyAgICBpZiAoIW5lZWRzVHlwZUNoZWNrKGVk
Z2UsIFNwZWNTZXRPYmplY3QpKQorICAgICAgICByZXR1cm47CisKKyAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBvcGVyYW5kKHRoaXMsIGVkZ2UpOworICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdl
LCBvcGVyYW5kLmdwcigpKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlT2Jq
ZWN0T3JPdGhlcihFZGdlIGVkZ2UpCiB7CiAgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBT
cGVjT2JqZWN0IHwgU3BlY090aGVyKSkKQEAgLTc2NjgsNiArNzY5NiwxMiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6
CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHNwZWN1bGF0
ZVNldE9iamVjdChlZGdlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBPYmplY3RPck90aGVy
VXNlOgogICAgICAgICBzcGVjdWxhdGVPYmplY3RPck90aGVyKGVkZ2UpOwogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5MSw2ICsxMjkxLDEyIEBAIHB1Ymxp
YzoKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKENfSklUT3BlcmF0aW9uX0VDSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIsIGFyZzMpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMg
b3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVS
ZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEuZ3ByKCksIGFyZzIuZ3ByKCksIG1hdGhJQyk7
CkBAIC0xNjcxLDYgKzE2NzcsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcx
KTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQp
OworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVy
YXRpb25fRUpaWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCB1bnNpZ25l
ZCBhcmcyLCB1bnNpZ25lZCBhcmczKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIFRydXN0ZWRJbW0zMihhcmcyKSwgVHJ1c3RlZEltbTMyKGFy
ZzMpKTsKQEAgLTE3MTksNiArMTczMSwxOCBAQCBwdWJsaWM6CiAgICAgfQogI2Vsc2UgLy8gVVNF
KEpTVkFMVUUzMl82NCkKIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19K
SVRPcGVyYXRpb25fRUNKWiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBK
U1ZhbHVlUmVncyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdH
UFIoKSwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlv
biwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFpfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgSlNWYWx1ZVJlZ3Mg
YXJnMSkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSk7Cisg
ICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAg
ICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKEpfSklUT3BlcmF0aW9u
X0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwgSlNWYWx1ZVJlZ3MgYXJnMSwg
SlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMpCiAgICAgewogICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJVF9EVU1NWV9BUkcgYXJn
MS5wYXlsb2FkR1BSKCksIGFyZzEudGFnR1BSKCksIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRh
Z0dQUigpLCBtYXRoSUMpOwpAQCAtMjY1Niw2ICsyNjgwLDEwIEBAIHB1YmxpYzoKICAgICB2b2lk
IHNwZWN1bGF0ZUZpbmFsT2JqZWN0KEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2Jq
ZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChF
ZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNwZWN1
bGF0ZU1hcE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRP
YmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSwgR1BSUmVnIGNl
bGwpOwogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihFZGdlKTsKICAgICB2b2lkIHNw
ZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKTsKICAgICB2b2lkIHNwZWN1bGF0
ZVN0cmluZ0lkZW50QW5kTG9hZFN0b3JhZ2UoRWRnZSBlZGdlLCBHUFJSZWcgc3RyaW5nLCBHUFJS
ZWcgc3RvcmFnZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNl
S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDEyIEBAIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBVc2UKICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAg
ICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIk1hcE9iamVjdFVzZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIG91dC5wcmludCgi
U2V0T2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJV
c2U6CiAgICAgICAgIG91dC5wcmludCgiT2JqZWN0T3JPdGhlciIpOwogICAgICAgICByZXR1cm47
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDggQEAgZW51bSBVc2VLaW5kIHsKICAgICBLbm93blN0cmluZ1Vz
ZSwKICAgICBLbm93blByaW1pdGl2ZVVzZSwgLy8gVGhpcyBiaXphcnJlIHR5cGUgYXJpc2VzIGZv
ciBvcF9zdHJjYXQsIHdoaWNoIGhhcyBhIGJ5dGVjb2RlIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwg
b25seSBzZWUgcHJpbWl0aXZlcyAoaS5lLiBub3Qgb2JqZWN0cykuCiAgICAgU3ltYm9sVXNlLAor
ICAgIE1hcE9iamVjdFVzZSwKKyAgICBTZXRPYmplY3RVc2UsCiAgICAgU3RyaW5nT2JqZWN0VXNl
LAogICAgIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlLAogICAgIE5vdFN0cmluZ1ZhclVzZSwKQEAg
LTEzNCw2ICsxMzYsMTAgQEAgaW5saW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoVXNl
SwogICAgICAgICByZXR1cm4gU3BlY0hlYXBUb3AgJiB+U3BlY09iamVjdDsKICAgICBjYXNlIFN5
bWJvbFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNTeW1ib2w7CisgICAgY2FzZSBNYXBPYmplY3RV
c2U6CisgICAgICAgIHJldHVybiBTcGVjTWFwT2JqZWN0OworICAgIGNhc2UgU2V0T2JqZWN0VXNl
OgorICAgICAgICByZXR1cm4gU3BlY1NldE9iamVjdDsKICAgICBjYXNlIFN0cmluZ09iamVjdFVz
ZToKICAgICAgICAgcmV0dXJuIFNwZWNTdHJpbmdPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZToKQEAgLTIyMSw2ICsyMjcsOCBAQCBpbmxpbmUgYm9vbCBpc0NlbGwoVXNl
S2luZCBraW5kKQogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNl
OgogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6CisgICAgY2FzZSBNYXBPYmplY3RV
c2U6CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAy
MDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgIkRGR0Fy
cmF5TW9kZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcC5oIgogI2luY2x1ZGUgIkluZGV4
aW5nVHlwZS5oIgorI2luY2x1ZGUgIkpTTWFwLmgiCisjaW5jbHVkZSAiSlNTZXQuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC0xMDIsNyArMTA0LDEzIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhTdHJ1Y3R1cmVfY2xhc3NJbmZv
LCBTdHJ1Y3R1cmU6OmNsYXNzSW5mb09mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX2ds
b2JhbE9iamVjdCwgU3RydWN0dXJlOjpnbG9iYWxPYmplY3RPZmZzZXQoKSkgXAogICAgIG1hY3Jv
KFN0cnVjdHVyZV9wcm90b3R5cGUsIFN0cnVjdHVyZTo6cHJvdG90eXBlT2Zmc2V0KCkpIFwKLSAg
ICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0dXJlSURPZmZz
ZXQoKSkKKyAgICBtYWNybyhTdHJ1Y3R1cmVfc3RydWN0dXJlSUQsIFN0cnVjdHVyZTo6c3RydWN0
dXJlSURPZmZzZXQoKSkgXAorICAgIG1hY3JvKEpTTWFwX2hhc2hNYXBJbXBsLCBKU01hcDo6b2Zm
c2V0T2ZIYXNoTWFwSW1wbCgpKSBcCisgICAgbWFjcm8oSlNTZXRfaGFzaE1hcEltcGwsIEpTU2V0
OjpvZmZzZXRPZkhhc2hNYXBJbXBsKCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9jYXBhY2l0
eSwgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZz
ZXRPZkNhcGFjaXR5KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwSW1wbF9idWZmZXIsICBIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQnVmZmVy
KCkpIFwKKyAgICBtYWNybyhIYXNoTWFwQnVja2V0X3ZhbHVlLCBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpIFwKKyAgICBtYWNybyhIYXNo
TWFwQnVja2V0X2tleSwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6
b2Zmc2V0T2ZLZXkoKSkgXAogCiAjZGVmaW5lIEZPUl9FQUNIX0lOREVYRURfQUJTVFJBQ1RfSEVB
UChtYWNybykgXAogICAgIG1hY3JvKERpcmVjdEFyZ3VtZW50c19zdG9yYWdlLCBEaXJlY3RBcmd1
bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSwgc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNiArMTgwLDEwIEBAIGlubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAg
ICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIE1hcEhh
c2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0
OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAg
Y2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTQzNyw2ICs0NDEsOCBA
QCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAg
ICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0
cmluZ09iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAg
ICAgICAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIFNldE9iamVj
dFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAg
ICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTm90Q2VsbFVz
ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVk
ZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUg
Ik9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1
ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDE4IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAg
IGNvbXBpbGVNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRN
YXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0TWFwQnVja2V0KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAg
Y29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlSXNOb25FbXB0
eU1hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6
CiAgICAgICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NjM1MSw2ICs2MzY0LDIyOCBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBo
aShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZvaWQg
Y29tcGlsZU1hcEhhc2goKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0g
bV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbCA9IG1fb3V0Lm5l
d0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRIYXNoID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm9uRW1wdHlTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAg
ICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUo
bV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsKSk7
CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxD
YXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVh
bChtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBl
KSwgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0cmFp
Z2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbm9uRW1w
dHlTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRy
KHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAor
ICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIoMCkp
LCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5U3RyaW5nQ2FzZSkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG5vbkVtcHR5U3RyaW5nQ2FzZSwgbm90Q2VsbCk7CisgICAgICAg
IExWYWx1ZSBoYXNoID0gbV9vdXQubFNocihtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFw
cy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksIG1fb3V0LmNvbnN0SW50MzIoNikpOworICAgICAg
ICBWYWx1ZUZyb21CbG9jayBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQgPSBtX291dC5hbmNob3Io
aGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoLCBtX291dC5jb25z
dEludDMyKDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29udGlu
dWF0aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwgaXNOdW1iZXJDYXNl
KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUpLCB1
bnN1cmUoaXNOdW1iZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShzdHJhaWdodEhhc2gp
LCB1bnN1cmUoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJhaWdodEhh
c2gsIHNsb3dDYXNlKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAg
TFZhbHVlIGtleSA9IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtleTsKKyAgICAgICAg
dGVtcCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7CisgICAgICAgIHRl
bXAgPSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRl
bXApOworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAgIHRlbXAgPSBrZXk7
CisgICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjIpKTsK
KyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSAr
PSB+KGtleSA8PCAxMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291
dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0ZW1wID0gbV9vdXQu
Yml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAg
ICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRl
bXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOworICAgICAgICBrZXkg
PSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7
CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9v
dXQuY29uc3RJbnQzMigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOwor
ICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAg
ICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTUpKTsKKyAgICAg
ICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtl
eSA8PCAyNyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwo
dGVtcCwgbV9vdXQuY29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90
KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8g
a2V5IF49IChrZXkgPj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0g
bV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAgICAgIGtleSA9IG1f
b3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5jYXN0VG9JbnQzMihr
ZXkpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Io
a2V5KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsKEludDMyLCBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShJ
bnQzMiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAg
IAorICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAg
ICAgICBMQmFzaWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3RQcmVzZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIG5vdEVtcHR5VmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3REZWxldGVkVmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGJ1Y2tldEtleU5vdENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBib3RoQXJlQ2VsbHMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBi
dWNrZXRLZXlJc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2Nr
IGJ1Y2tldEtleUlzTnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgYm90aEFyZU51bWJlcnMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9j
ayBidWNrZXRLZXlJc0ludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMVmFsdWUgbWFw
OworICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
KQorICAgICAgICAgICAgbWFwID0gbG93TWFwT2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICBlbHNlIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2Up
CisgICAgICAgICAgICBtYXAgPSBsb3dTZXRPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAgICAgTFZhbHVlIGtleSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
IExWYWx1ZSBoYXNoID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDMoKSk7CisKKyAgICAgICAgTFZh
bHVlIGhhc2hNYXBJbXBsID0gbV9vdXQubG9hZFB0cihtYXAsIG1fbm9kZS0+Y2hpbGQxKCkudXNl
S2luZCgpID09IE1hcE9iamVjdFVzZSA/IG1faGVhcHMuSlNNYXBfaGFzaE1hcEltcGwgOiBtX2hl
YXBzLkpTU2V0X2hhc2hNYXBJbXBsKTsKKyAgICAgICAgTFZhbHVlIGJ1ZmZlciA9IG1fb3V0Lmxv
YWRQdHIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfYnVmZmVyKTsKKyAgICAgICAg
TFZhbHVlIG1hc2sgPSBtX291dC5zdWIobV9vdXQubG9hZDMyKGhhc2hNYXBJbXBsLCBtX2hlYXBz
Lkhhc2hNYXBJbXBsX2NhcGFjaXR5KSwgbV9vdXQuaW50MzJPbmUpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIGluZGV4U3RhcnQgPSBtX291dC5hbmNob3IoaGFzaCk7CisgICAgICAgIG1fb3V0
Lmp1bXAobG9vcFN0YXJ0KTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB1bm1h
c2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAgICAgICAgTFZhbHVl
IGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOworICAgICAgICBMVmFs
dWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5w
cm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50
NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3VsdCA9
IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0
LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSksCisgICAgICAg
ICAgICB1bnN1cmUobm90UHJlc2VudEluVGFibGUpLCB1bnN1cmUobm90RW1wdHlWYWx1ZSkpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5vdERlbGV0ZWRWYWx1ZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291dC5j
b25zdEludFB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5
Pj46OmRlbGV0ZWRWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVu
c3VyZShub3REZWxldGVkVmFsdWUpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3REZWxl
dGVkVmFsdWUsIG5vdEJpdEVxdWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1Y2tldEtleSA9IG1fb3V0
LmxvYWQ2NChoYXNoTWFwQnVja2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNrZXRfa2V5KTsKKyAgICAg
ICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1
YWwoa2V5LCBidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShub3RCaXRFcXVhbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVxdWFs
LCBidWNrZXRLZXlJc0NlbGwpOworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtl
eSksCisgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwgdW5zdXJlKGJ1Y2tldEtl
eU5vdENlbGwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGwsIGJv
dGhBcmVDZWxscyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoa2V5KSwKKyAgICAgICAg
ICAgIHVuc3VyZShib3RoQXJlQ2VsbHMpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOworICAgICAg
ICBtX291dC5icmFuY2goaXNTdHJpbmcoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShi
dWNrZXRLZXlJc1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENlbGwpOworICAgICAgICBt
X291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
Tm90Q2VsbCwgYnVja2V0S2V5SXNOdW1iZXIpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RO
dW1iZXIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJl
KGJ1Y2tldEtleUlzTnVtYmVyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
SXNOdW1iZXIsIGJvdGhBcmVOdW1iZXJzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TnVt
YmVyKGtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShib3RoQXJl
TnVtYmVycykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVOdW1iZXJzLCBidWNr
ZXRLZXlJc0ludDMyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYnVja2V0S2V5
KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShidWNrZXRLZXlJc0ludDMy
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJbnQzMiwgbG9vcEFyb3Vu
ZCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGtleSksCisgICAgICAgICAgICB1
bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGxvb3BBcm91bmQsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdU
b1BoaSh1bm1hc2tlZEluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291dC5p
bnQzMk9uZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlw
ZSgpLAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpID09IE1hcE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlv
bkpTU2V0RmluZEJ1Y2tldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSwgaGFzaCkpOworICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90
UHJlc2VudEluVGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5v
dFByZXNlbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5waGko
cG9pbnRlclR5cGUoKSwgYnVja2V0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJl
c3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQor
ICAgIHsKKyAgICAgICAgTFZhbHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdC
bG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygp
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQ
dHIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNr
ZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhh
c0J1Y2tldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1h
cEJ1Y2tldF92YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNl
dEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7
CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCgpCisgICAgewor
ICAgICAgICBMVmFsdWUgYnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0LCBtX291dC5jb25z
dEludFB0cigwKSk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKKyAgICB9CisKICAgICB2
b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOwpAQCAtOTkyOCw2ICsxMDE2MywyMCBAQCBwcml2YXRlOgogICAgICAgICBzcGVj
dWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICB9CisKKyAgICBMVmFsdWUgbG93TWFwT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVNYXBP
YmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBMVmFsdWUgbG93U2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwg
cmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVl
IGxvd1N0cmluZyhFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9t
YXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICB7CkBAIC0xMDA1MSw2ICsxMDMwMCwxNyBAQCBw
cml2YXRlOgogICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAg
ICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExWYWx1ZSBsb3dNYXBCdWNrZXQoRWRnZSBl
ZGdlKQorICAgIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fbWFwQnVja2V0
VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCks
IHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1
ZSBzdHJpY3RJbnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpAQCAt
MTAzNTQsNiArMTA2MTQsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RV
c2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxh
dGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRP
YmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6CiAgICAgICAgICAgICBzcGVjdWxh
dGVTdHJpbmcoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwNjgyLDYgKzEwOTQ4LDI4
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwg
bG93Q2VsbChlZGdlKSk7CiAgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRn
ZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAg
ICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjTWFwT2JqZWN0LCBpc05vdFR5
cGUoY2VsbCwgSlNNYXBUeXBlKSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmpl
Y3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIGxv
d0NlbGwoZWRnZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2Ug
ZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1NldE9iamVjdCwgaXNOb3RUeXBl
KGNlbGwsIEpTU2V0VHlwZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0
KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBsb3dD
ZWxsKGVkZ2UpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBl
ZGdlLCBMVmFsdWUgY2VsbCkKICAgICB7CkBAIC0xMTQ1MCw2ICsxMTczOCwxMCBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZh
bHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChO
b2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21hcEJ1Y2tldFZhbHVl
cy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9
CiAgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAg
ICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1f
aGlnaEJsb2NrKSk7CkBAIC0xMTQ4Myw2ICsxMTc3NSwxMCBAQCBwcml2YXRlOgogICAgIHsKICAg
ICAgICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBC
dWNrZXQoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fbm9kZSwg
dmFsdWUpOworICAgIH0KICAgICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCiAgICAgewog
ICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CkBAIC0xMTY2Niw2ICsxMTk2Miw3IEBA
IHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVl
VmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZh
bHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1
ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9tYXBCdWNrZXRWYWx1
ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7
CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIEIzIGZy
b20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIw
NTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1MiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6
ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0pOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkK
K3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjpXYW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1
bHQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0
OworICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7
CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2Ny
YXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+
IDIyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDIyKSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtl
eSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0
NjQoVHJ1c3RlZEltbTMyKDEzKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAg
YWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1v
dmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0
Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAz
KTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIo
MyksIHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0g
KGtleSA+PiAxNSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRy
dXN0ZWRJbW0zMigxNSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAg
ICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAg
IGxzaGlmdDY0KFRydXN0ZWRJbW0zMigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gp
OworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7
CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigz
MSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2
NChUcnVzdGVkSW1tUHRyKG1hc2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9CisjZW5kaWYgLy8gVVNF
KEpTVkFMVUU2NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShy
ZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVs
cGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9u
ZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBl
KCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIENvZGVCbG9jayogY29kZUJsb2Nr
KCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9
CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsg
fQpAQCAtMTQ4OSw2ICsxNDg5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNP
YmplY3Q8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1
c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAg
ICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJl
c3MocmVzdWx0R1BSLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsK
ICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHZvaWQgV2FuZ3NJbnQ2NEhhc2goR1BS
UmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5kaWYKICAgICAKIHByb3Rl
Y3RlZDoKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDYgKzE5NCw3IEBAIHR5
cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxsKiAo
SklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0WlopKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpD
X0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCog
KEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShFeGVjU3RhdGUqLCBKU1Njb3Bl
KiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAq
Q19KSVRPcGVyYXRpb25fRUNKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9u
X0QpKGRvdWJsZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRp
b25fRykoSlNHbG9iYWxPYmplY3QqKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpE
X0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIwNTMwNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBNb2R1bGVBbmFs
eXplcjo6TW9kdWxlQW5hbHl6ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBt
b2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBs
ZXhpY2FsVmFyaWFibGVzKQogICAgIDogbV92bSgmZXhlYy0+dm0oKSkKLSAgICAsIG1fbW9kdWxl
UmVjb3JkKGV4ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxl
S2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykpCisg
ICAgLCBtX21vZHVsZVJlY29yZChleGVjLT52bSgpLCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4
ZWMsIGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9kdWxlUmVjb3Jk
U3RydWN0dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxl
eGljYWxWYXJpYWJsZXMpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisKKyNpbmNsdWRlICJD
b3BpZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKyNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBs
YXRlPD4KK2NvbnN0IEpTX0VYUE9SVERBVEEgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRy
LCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXk+KSB9OworCit0ZW1wbGF0ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQorICAgIHsgIkhh
c2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBE
YXRhPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVj
dCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9u
ZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2KTsKKworICAgIHN0
YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikg
PT0gMCwgIldlIGFzc3VtZSB0aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4gbWVtYmVycyBvbmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdp
c2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6
ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOworfQorCit0ZW1wbGF0
ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwi
LCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PikgfTsKKwordGVtcGxhdGU8PgorY29uc3QgSlNfRVhQ
T1JUREFUQSBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXlWYWx1ZT4+KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tl
dD4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09i
amVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
aGVhZCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2
aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRo
aXNPYmplY3QtPm1fYnVmZmVyLmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygp
KTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ+Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZp
c2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2lu
Z1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0aGlzT2Jq
ZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09IE1hcEJh
Y2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmpl
Y3QtPm1fYnVmZmVyLmdldCgpKSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogb2xkQnVm
ZmVyID0gdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJT
aXplSW5CeXRlcyA9IHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhh
c2hNYXBCdWZmZXJUeXBlKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyVHlw
ZSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOworICAgICAg
ICBtZW1jcHkobmV3QnVmZmVyLCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgdGhpc09iamVjdC0+bV9idWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVyKTsKKyAg
ICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAg
IH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IEhhc2hNYXBCdWNrZXREYXRhS2V5
IHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworfTsKKworc3RydWN0IEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWUgeworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBrZXk7CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+IHZhbHVlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIERh
dGE+CitjbGFzcyBIYXNoTWFwQnVja2V0IDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBK
U0NlbGwgQmFzZTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0
aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXRE
YXRhS2V5Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0p
CisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5nZXQo
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3RhdGlj
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0
YUtleVZhbHVlPjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYg
dm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5n
ZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAg
c3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhD
ZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBI
YXNoTWFwQnVja2V0KiBjcmVhdGUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tl
dCogYnVja2V0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEJ1Y2tldDxEYXRh
Pj4odm0uaGVhcCkpIEhhc2hNYXBCdWNrZXQodm0sIHNlbGVjdFN0cnVjdHVyZSh2bSkpOworICAg
ICAgICBidWNrZXQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgQVNTRVJUKCFidWNrZXQt
Pm5leHQoKSk7CisgICAgICAgIEFTU0VSVCghYnVja2V0LT5wcmV2KCkpOworICAgICAgICByZXR1
cm4gYnVja2V0OworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXQoVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeyB9CisKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0TmV4dChWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tl
dCkKKyAgICB7CisgICAgICAgIG1fbmV4dC5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CisgICAgfQor
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRQcmV2KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVj
a2V0KQorICAgIHsKKyAgICAgICAgbV9wcmV2LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9
CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0S2V5KFZNJiB2bSwgSlNWYWx1ZSBrZXkpCisg
ICAgeworICAgICAgICBtX2RhdGEua2V5LnNldCh2bSwgdGhpcywga2V5KTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFt
ZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT46OnZhbHVlPjo6dHlwZSBzZXRWYWx1ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBtX2RhdGEudmFsdWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgfQorICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleT46OnZhbHVl
Pjo6dHlwZSBzZXRWYWx1ZShWTSYsIEpTVmFsdWUpIHsgfQorCisgICAgQUxXQVlTX0lOTElORSBK
U1ZhbHVlIGtleSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5rZXkuZ2V0KCk7IH0KKworICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0
ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6
dmFsdWUsIEpTVmFsdWU+Ojp0eXBlIHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2RhdGEudmFsdWUuZ2V0KCk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFw
QnVja2V0KiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgQUxXQVlT
X0lOTElORSBIYXNoTWFwQnVja2V0KiBwcmV2KCkgY29uc3QgeyByZXR1cm4gbV9wcmV2LmdldCgp
OyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgZGVsZXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGVsZXRlZDsgfQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXREZWxldGVkKGJvb2wgZGVsZXRl
ZCkgeyBtX2RlbGV0ZWQgPSBkZWxldGVkOyB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mS2V5KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1
Y2tldCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRPRihEYXRhLCBrZXkpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjpl
bmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1
ZSwgcHRyZGlmZl90Pjo6dHlwZSBvZmZzZXRPZlZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEJ1Y2tldCwgbV9kYXRhKSArIE9CSkVDVF9PRkZTRVRP
RihEYXRhLCB2YWx1ZSk7CisgICAgfQorCitwcml2YXRlOgorICAgIERhdGEgbV9kYXRhOworICAg
IFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0PiBtX25leHQ7CisgICAgV3JpdGVCYXJyaWVyPEhh
c2hNYXBCdWNrZXQ+IG1fcHJldjsKKyAgICBib29sIG1fZGVsZXRlZCB7IGZhbHNlIH07Cit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBCdWZmZXIgewor
cHVibGljOgorICAgIEhhc2hNYXBCdWZmZXIoKSA9IGRlbGV0ZTsKKworICAgIHN0YXRpYyBzaXpl
X3QgYWxsb2NhdGlvblNpemUodWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICByZXR1
cm4gY2FwYWNpdHkgKiBzaXplb2YoQnVja2V0VHlwZSopOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PEJ1Y2tldFR5cGUqKj4odGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIEhh
c2hNYXBCdWZmZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNDZWxsKiBvd25l
ciwgdWludDMyX3QgY2FwYWNpdHkpCisgICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEhhc2hN
YXBCdWZmZXI6OmFsbG9jYXRpb25TaXplKGNhcGFjaXR5KTsKKyAgICAgICAgdm9pZCogZGF0YSA9
IG51bGxwdHI7CisgICAgICAgIERlZmVyR0NGb3JBV2hpbGUgZGVmZXIodm0uaGVhcCk7CisgICAg
ICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2Uob3duZXIsIGFsbG9jYXRpb25TaXpl
LCAmZGF0YSkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29w
ZSk7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIEhh
c2hNYXBCdWZmZXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWZmZXIqPihkYXRhKTsK
KyAgICAgICAgbWVtc2V0KGJ1ZmZlciwgLTEsIGFsbG9jYXRpb25TaXplKTsKKyAgICAgICAgcmV0
dXJuIGJ1ZmZlcjsKKyAgICB9Cit9OworCitBTFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGFyZUtl
eXNFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIC8v
IFdlIHdhbnQgKzAgYW5kIC0wIHRvIGJlIGNvbXBhcmVkIHRvIHRydWUgaGVyZS4gc2FtZVZhbHVl
KCkgaXRzZWxmIGRvZXNuJ3QKKyAgICAvLyBndWFyYW50ZWUgdGhhdCwgaG93ZXZlciwgd2Ugbm9y
bWFsaXplIGFsbCBrZXlzIGJlZm9yZSBjb21wYXJpbmcgYW5kIHN0b3JpbmcKKyAgICAvLyB0aGVt
IGluIHRoZSBtYXAuIFRoZSBub3JtYWxpemF0aW9uIHdpbGwgY29udmVydCAtMC4wIGFuZCAwLjAg
dG8gdGhlIGludGVnZXIKKyAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgMC4KKyAgICByZXR1cm4g
c2FtZVZhbHVlKGV4ZWMsIGEsIGIpOworfQorCitBTFdBWVNfSU5MSU5FIEpTVmFsdWUgbm9ybWFs
aXplTWFwS2V5KEpTVmFsdWUga2V5KQoreworICAgIGlmICgha2V5LmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBrZXk7CisKKyAgICBpZiAoa2V5LmlzSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IGtleTsKKworICAgIGRvdWJsZSBkID0ga2V5LmFzRG91YmxlKCk7CisgICAgaWYgKHN0ZDo6aXNu
YW4oZCkpCisgICAgICAgIHJldHVybiBrZXk7CisKKyAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGlu
dD4oZCk7CisgICAgaWYgKGkgPT0gZCkgeworICAgICAgICAvLyBXaGVuIGEga2V5IGlzIC0wLCB3
ZSBjb252ZXJ0IGl0IHRvIHBvc2l0aXZlIHplcm8uCisgICAgICAgIC8vIFdoZW4gYSBrZXkgaXMg
dGhlIGRvdWJsZSByZXByZXNlbnRhdGlvbiBmb3IgYW4gaW50ZWdlciwgd2UgY29udmVydCBpdCB0
byBhbiBpbnRlZ2VyLgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaSk7CisgICAgfQorICAgIC8v
IFRoaXMgbWVhbnMga2V5IGlzIGRlZmluaXRlbHkgbm90IG5lZ2F0aXZlIHplcm8sIGFuZCBpdCdz
IGRlZmluaXRlbHkgbm90IGEgZG91YmxlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuIAor
ICAgIHJldHVybiBrZXk7Cit9CisKK0FMV0FZU19JTkxJTkUgdWludDMyX3QganNNYXBIYXNoKEV4
ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0Uobm9ybWFsaXplTWFwS2V5KHZhbHVlKSA9PSB2YWx1ZSwgIldlIGV4cGVjdCBub3Jt
YWxpemVkIHZhbHVlcyBmbG93aW5nIGludG8gdGhpcyBmdW5jdGlvbi4iKTsKKworICAgIGF1dG8g
c2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKworICAgIGlmICh2YWx1ZS5pc0RvdWJs
ZSgpKSB7CisgICAgICAgIGRvdWJsZSBkID0gdmFsdWUuYXNEb3VibGUoKTsKKyAgICAgICAgaWYg
KCFzdGQ6OmlzbmFuKGQpKSB7CisgICAgICAgICAgICBpbnQgaSA9IHN0YXRpY19jYXN0PGludD4o
ZCk7CisgICAgICAgICAgICBpZiAoaSA9PSBkKQorICAgICAgICAgICAgICAgIHZhbHVlID0ganNO
dW1iZXIoaSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsK
KyAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgY29u
c3QgU3RyaW5nJiB3dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOworICAgICAgICBpZiAo
VU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OworICAgICAgICByZXR1cm4gd3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0KKworICAg
IGF1dG8gd2FuZ3NJbnQ2NEhhc2ggPSBbXSAodWludDY0X3Qga2V5KSAtPiB1aW50MzJfdCB7Cisg
ICAgICAgIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDIyKTsK
KyAgICAgICAga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gOCk7
CisgICAgICAgIGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICBrZXkgXj0gKGtleSA+PiAxNSk7
CisgICAgICAgIGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDMx
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpOworICAgIH07Cisg
ICAgdWludDY0X3QgcmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIHJldHVy
biB3YW5nc0ludDY0SGFzaChyYXdWYWx1ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNo
TWFwQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTQ2VsbCB7CisgICAg
dHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWZmZXI8SGFzaE1hcEJ1
Y2tldFR5cGU+IEhhc2hNYXBCdWZmZXJUeXBlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQg
PSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6dmFs
dWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAg
ICAgICByZXR1cm4gdm0uaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0
U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbE1h
cFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9J
TkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBIYXNoTWFwSW1wbCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpLCAiV2UgYXNzdW1lIHRoaXMgdG8gYmUgdHJ1
ZSBpbiB0aGUgREZHIGFuZCBGVEwgSklULiIpOworCisgICAgICAgIEhhc2hNYXBJbXBsKiBpbXBs
ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXApKSBIYXNo
TWFwSW1wbCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGltcGwtPmZpbmlzaENy
ZWF0aW9uKGV4ZWMsIHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRp
YyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4p
OworCisgICAgSGFzaE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwg
bV9kZWxldGVDb3VudCgwKQorICAgICAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICB7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZlcigpOworICAgIH0KKwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgewor
ICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4
ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBtX2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVj
a2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIEhhc2hN
YXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKKworICAgICAgICBtX2hlYWQtPnNldE5leHQodm0s
IG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwgbV9oZWFkLmdldCgp
KTsKKyAgICAgICAgbV9oZWFkLT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBtX3RhaWwtPnNl
dERlbGV0ZWQodHJ1ZSk7CisKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUq
IGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFw
QnVja2V0VHlwZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTEpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRW1wdHkoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tl
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNrZXQgPT0gZW1wdHlWYWx1ZSgpOworICAgIH0K
KworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0VHlwZSogZGVsZXRlZFZhbHVlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldFR5cGUqPihzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KC0zKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0RlbGV0ZWQoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBidWNrZXQgPT0gZGVsZXRlZFZhbHVlKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGtleSkKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIHVpbnQz
Ml90IGhhc2ggPSBqc01hcEhhc2goZXhlYywgdm0sIGtleSk7CisgICAgICAgIGF1dG8gc2NvcGUg
PSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4
Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
ZmluZEJ1Y2tldChleGVjLCBrZXksIGhhc2gpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIHVpbnQzMl90IGhhc2gpCisgICAgeworICAgICAgICBrZXkgPSBub3JtYWxpemVNYXBLZXko
a2V5KTsKKyAgICAgICAgcmV0dXJuIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXpl
ZChleGVjLCBrZXksIGhhc2gpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIGlmIChIYXNo
TWFwQnVja2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KSkKKyAgICAgICAg
ICAgIHJldHVybiAoKmJ1Y2tldCktPnZhbHVlKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIWZpbmRCdWNrZXQoZXhlYywg
a2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlKCkpCisgICAgeworICAgICAg
ICBrZXkgPSBub3JtYWxpemVNYXBLZXkoa2V5KTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1aW50
MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCB2bSwga2V5KSAmIG1hc2s7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB3aGls
ZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAgICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0
KSAmJiBhcmVLZXlzRXF1YWwoZXhlYywga2V5LCBidWNrZXQtPmtleSgpKSkgeworICAgICAgICAg
ICAgICAgIGJ1Y2tldC0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFz
azsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKworICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV3RW50cnkgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAg
IGJ1ZmZlcltpbmRleF0gPSBuZXdFbnRyeTsKKyAgICAgICAgbmV3RW50cnktPnNldEtleSh2bSwg
a2V5KTsKKyAgICAgICAgbmV3RW50cnktPnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgIG5l
d0VudHJ5LT5zZXREZWxldGVkKGZhbHNlKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5l
d1RhaWwgPSBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKTsKKyAgICAgICAgbV90YWlsLnNl
dCh2bSwgdGhpcywgbmV3VGFpbCk7CisgICAgICAgIG5ld1RhaWwtPnNldFByZXYodm0sIG5ld0Vu
dHJ5KTsKKyAgICAgICAgbmV3VGFpbC0+c2V0RGVsZXRlZCh0cnVlKTsKKyAgICAgICAgbmV3RW50
cnktPnNldE5leHQodm0sIG5ld1RhaWwpOworICAgICAgICB1aW50MzJfdCBuZXdTaXplID0gKytt
X3NpemU7CisgICAgICAgIGlmICgyKm5ld1NpemUgPiBtX2NhcGFjaXR5KQorICAgICAgICAgICAg
cmVoYXNoKGV4ZWMpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCByZW1vdmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXRU
eXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpOworICAgICAgICBpZiAoIWJ1Y2tl
dCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogaW1wbCA9ICpidWNrZXQ7CisgICAgICAg
IGltcGwtPm5leHQoKS0+c2V0UHJldih2bSwgaW1wbC0+cHJldigpKTsKKyAgICAgICAgaW1wbC0+
cHJldigpLT5zZXROZXh0KHZtLCBpbXBsLT5uZXh0KCkpOworICAgICAgICBpbXBsLT5zZXREZWxl
dGVkKHRydWUpOworCisgICAgICAgICpidWNrZXQgPSBkZWxldGVkVmFsdWUoKTsKKworICAgICAg
ICBtX2RlbGV0ZUNvdW50Kys7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
QUxXQVlTX0lOTElORSB1aW50MzJfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG1fc2l6ZSA+PSBtX2RlbGV0ZUNvdW50KTsKKyAgICAgICAgcmV0dXJuIG1fc2l6
ZSAtIG1fZGVsZXRlQ291bnQ7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFy
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgICAgIG1fc2l6ZSA9IDA7CisgICAgICAgIG1fZGVsZXRlQ291bnQgPSAwOworICAgICAgICBI
YXNoTWFwQnVja2V0VHlwZSogaGVhZCA9IG1faGVhZC5nZXQoKTsKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIGJ1Y2tldCA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNoTWFwQnVja2V0
VHlwZSogdGFpbCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAhPSB0YWls
KSB7CisgICAgICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogbmV4dCA9IGJ1Y2tldC0+bmV4dCgp
OworICAgICAgICAgICAgLy8gV2UgcmVzdGFydCBlYWNoIGl0ZXJhdG9yIGJ5IHBvaW50aW5nIGl0
IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LgorICAgICAgICAgICAgYnVja2V0LT5zZXROZXh0KHZt
LCBoZWFkKTsKKyAgICAgICAgICAgIGJ1Y2tldCA9IG5leHQ7CisgICAgICAgIH0KKyAgICAgICAg
bV9oZWFkLT5zZXROZXh0KHZtLCBtX3RhaWwuZ2V0KCkpOworICAgICAgICBtX3RhaWwtPnNldFBy
ZXYodm0sIG1faGVhZC5nZXQoKSk7CisgICAgICAgIG1fY2FwYWNpdHkgPSA0OworICAgICAgICBt
YWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IHNpemVfdCBidWZmZXJTaXplSW5CeXRlcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9jYXBhY2l0eSAqIHNpemVvZihIYXNoTWFwQnVja2V0VHlwZSopOworICAgIH0KKworICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCdWZmZXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0VHlwZT4sIG1fYnVmZmVyKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ2FwYWNpdHkoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0
VHlwZT4sIG1fY2FwYWNpdHkpOworICAgIH0KKworICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBoZWFk
KCkgeyByZXR1cm4gbV9oZWFkLmdldCgpOyB9CisgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIHRhaWwo
KSB7IHJldHVybiBtX3RhaWwuZ2V0KCk7IH0KKworICAgIHNpemVfdCBhcHByb3hpbWF0ZVNpemUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplb2YoSGFzaE1hcEltcGwp
OworICAgICAgICBzaXplICs9IGJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIHNpemUgKz0g
MiAqIHNpemVvZihIYXNoTWFwQnVja2V0VHlwZSk7IC8vIEhlYWQgYW5kIHRhaWwgbWVtYmVycy4K
KyAgICAgICAgc2l6ZSArPSAobV9kZWxldGVDb3VudCArIG1fc2l6ZSkgKiBzaXplb2YoSGFzaE1h
cEJ1Y2tldFR5cGUpOyAvLyBOdW1iZXIgb2YgbWVtYmVycyBvbiB0aGUgbGlzdC4KKyAgICAgICAg
cmV0dXJuIHNpemU7CisgICAgfQorCitwcml2YXRlOgorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1h
cEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6ZWQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAgIGNv
bnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMyX3QgaW5k
ZXggPSBoYXNoICYgbWFzazsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0
aGlzLT5idWZmZXIoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZl
cltpbmRleF07CisKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAg
ICAgIGlmICghaXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVj
a2V0LT5rZXkoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlciArIGluZGV4OworICAg
ICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNrZXQg
PSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIHZvaWQgcmVoYXNoKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1ND
T1BFKHZtKTsKKworICAgICAgICBtX2NhcGFjaXR5ID0gbV9jYXBhY2l0eSAqIDI7CisgICAgICAg
IG1ha2VBbmRTZXROZXdCdWZmZXIoZXhlYywgdm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEhhc2hNYXBC
dWNrZXRUeXBlKiBpdGVyID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRU
eXBlKiBlbmQgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBt
X2NhcGFjaXR5IC0gMTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1f
Y2FwYWNpdHkgLSAxKSkpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRo
aXMtPmJ1ZmZlcigpOworICAgICAgICB3aGlsZSAoaXRlciAhPSBlbmQpIHsKKyAgICAgICAgICAg
IHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBpdGVyLT5rZXkoKSkgJiBtYXNr
OworICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRSghc2NvcGUuZXhjZXB0aW9uKCksICJB
bGwga2V5cyBzaG91bGQgYWxyZWFkeSBiZSBoYXNoZWQgYmVmb3JlLCBzbyB0aGlzIHNob3VsZCBu
b3QgdGhyb3cgYmVjYXVzZSBpdCB3b24ndCByZXNvbHZlIHJvcGVzLiIpOworICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5k
ZXhdOworICAgICAgICAgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgICAg
ICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJ1ZmZlcltpbmRleF0gPSBpdGVyOworICAgICAgICAgICAgaXRl
ciA9IGl0ZXItPm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgbWFrZUFuZFNl
dE5ld0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghKG1fY2FwYWNpdHkgJiAobV9jYXBhY2l0eSAtIDEpKSk7CisKKyAgICAgICAgSGFzaE1hcEJ1
ZmZlclR5cGUqIGJ1ZmZlciA9IEhhc2hNYXBCdWZmZXJUeXBlOjpjcmVhdGUoZXhlYywgdm0sIHRo
aXMsIG1fY2FwYWNpdHkpOworICAgICAgICBpZiAoVU5MSUtFTFkoIWJ1ZmZlcikpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgbV9idWZmZXIuc2V0KHZtLCB0aGlzLCBidWZmZXIpOwor
ICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2FwYWNpdHk7IGkrKykKKyAgICAgICAgICAgICAgICBBU1NFUlQoaXNF
bXB0eSh0aGlzLT5idWZmZXIoKVtpXSkpOworICAgICAgICB9CisgICAgfQorCisgICAgV3JpdGVC
YXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBtX2hlYWQ7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hN
YXBCdWNrZXRUeXBlPiBtX3RhaWw7CisgICAgQ29weUJhcnJpZXI8SGFzaE1hcEJ1ZmZlclR5cGU+
IG1fYnVmZmVyOworICAgIHVpbnQzMl90IG1fc2l6ZTsKKyAgICB1aW50MzJfdCBtX2RlbGV0ZUNv
dW50OworICAgIHVpbnQzMl90IG1fY2FwYWNpdHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCShyZXZpc2lv
biAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAko
d29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOSBAQCBlbnVtIEpTX0VYUE9SVF9QUklWQVRFIElu
dHJpbnNpYyB7CiAgICAgSXNSZWdFeHBPYmplY3RJbnRyaW5zaWMsCiAgICAgSXNUeXBlZEFycmF5
Vmlld0ludHJpbnNpYywKICAgICBCb3VuZFRoaXNOb0FyZ3NGdW5jdGlvbkNhbGxJbnRyaW5zaWMs
CisgICAgSlNNYXBHZXRJbnRyaW5zaWMsCisgICAgSlNNYXBIYXNJbnRyaW5zaWMsCisgICAgSlNT
ZXRIYXNJbnRyaW5zaWMsCiAKICAgICAvLyBHZXR0ZXIgaW50cmluc2ljcy4KICAgICBUeXBlZEFy
cmF5TGVuZ3RoSW50cmluc2ljLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQ0pTVmFsdWUuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNDSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDYsNiArNjA2LDkgQEAg
aW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBKU0NlbGwqIGEsIAogCiBib29sIGlzVGhpc1Zh
bHVlQWx0ZXJlZChjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBKU09iamVjdCogYmFzZU9iamVjdCk7
CiAKKy8vIFNlZSBzZWN0aW9uIDcuMi45OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIv
I3NlYy1zYW1ldmFsdWUKK2Jvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgYSwgSlNW
YWx1ZSBiKTsKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU0NKU1ZhbHVlX2gK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlu
bGluZXMuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDSlNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1OCw2ICsxMDU4LDIy
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBpc1RoaXNWYWx1ZUFsdGVyZWQoY28KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8v
ZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZQorQUxXQVlTX0lOTElORSBib29sIHNhbWVWYWx1ZShFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQoreworICAgIGlmICghYS5pc051bWJl
cigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7Cisg
ICAgaWYgKCFiLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkb3VibGUg
eCA9IGEuYXNOdW1iZXIoKTsKKyAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKKyAgICBib29s
IHhJc05hTiA9IHN0ZDo6aXNuYW4oeCk7CisgICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkp
OworICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQorICAgICAgICByZXR1cm4geElzTmFOICYmIHlJ
c05hTjsKKyAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpT
VmFsdWVJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQx
LDcgKzY0MSw3IEBAIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXIKICAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVydHlOYW1lcy0+UmVmbGVj
dCwgcmVmbGVjdE9iamVjdCwgRG9udEVudW0pOwogCiAgICAgbV9tb2R1bGVMb2FkZXJTdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX21vZHVsZUxvYWRlclByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1fbW9kdWxlTG9hZGVyLnNl
dCh2bSwgdGhpcywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZSh2bSwgdGhpcywgbV9tb2R1bGVMb2Fk
ZXJTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIEpT
TW9kdWxlTG9hZGVyOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB2bSwgdGhpcywgbV9tb2R1bGVMb2Fk
ZXJTdHJ1Y3R1cmUuZ2V0KCkpKTsKICAgICBpZiAoT3B0aW9uczo6ZXhwb3NlSW50ZXJuYWxNb2R1
bGVMb2FkZXIoKSkKICAgICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnBy
b3BlcnR5TmFtZXMtPkxvYWRlciwgbV9tb2R1bGVMb2FkZXIuZ2V0KCksIERvbnRFbnVtKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkocmV2aXNpb24gMjA1
MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw3OCArMjYsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJK
U01hcC5oIgogCi0jaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAi
TWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFz
c0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1hcCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSlNNYXApIH07CiAKLXZvaWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxs
KQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAg
dGhpc09iamVjdC0+SlNNYXA6On5KU01hcCgpOwotfQotCi1zaXplX3QgSlNNYXA6OmVzdGltYXRl
ZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
TWFwKj4oY2VsbCk7Ci0gICAgc2l6ZV90IG1hcERhdGFTaXplID0gdGhpc09iamVjdC0+bV9tYXBE
YXRhLmNhcGFjaXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNl
bGwpICsgbWFwRGF0YVNpemU7Ci19Ci0KIFN0cmluZyBKU01hcDo6dG9TdHJpbmdOYW1lKGNvbnN0
IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmpl
Y3QiKTsKIH0KIAotdm9pZCBKU01hcDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRv
cik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2VsbCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVuKGNl
bGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpTTWFwOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCog
Y2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBCYXNl
Ojpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nhc3Q8SlNN
YXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOwot
fQotCi1ib29sIEpTTWFwOjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAg
ICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5zKGV4ZWMsIGtleSk7Ci19Ci0KLXNpemVfdCBKU01h
cDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4
ZWMpOwotfQotCi1KU1ZhbHVlIEpTTWFwOjpnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtl
eSkKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5KTsKLSAg
ICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCBKU01hcDo6c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgbV9tYXBEYXRhLnNldChleGVjLCB0aGlzLCBrZXks
IHZhbHVlKTsKLX0KLQotdm9pZCBKU01hcDo6Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAgICBtX21h
cERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBKU01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBrZXkpCi17Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5yZW1vdmUoZXhlYywga2V5KTsK
LX0KLQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lv
biAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiwxMDggKzI2LDQ5IEBACiAjaWZuZGVmIEpTTWFwX2gKICNkZWZpbmUgSlNN
YXBfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09i
amVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCiAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi1jbGFzcyBKU01hcCA6IHB1
YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU01hcCA6IHB1YmxpYyBNYXBCYXNl
PEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+IHsKKyAgICB0eXBlZGVm
IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4gQmFzZTsK
IHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IEJhc2U7Ci0KICAgICBm
cmllbmQgY2xhc3MgSlNNYXBJdGVyYXRvcjsKIAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9u
cyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAotICAg
IC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4KLSAgICBjbGFzcyBFbnRyeSB7Ci0g
ICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1fa2V5OwotICAgICAg
ICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAg
Y29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBXcml0ZUJh
cnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xv
dFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZtX2tleSk7Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV92YWx1ZSk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpT
VmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBr
ZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVy
KEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3Jp
dGVCYXJyaWVyKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiB2
bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAg
ICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAg
ICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0eXBl
ZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBKU01hcEl0ZXJhdG9yPiBNYXBEYXRhOwotCiAgICAgREVD
TEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBl
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmpl
Y3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZv
KCkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhKU01hcFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTTWFwKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0sIHN0
cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAg
IGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgICAgIHJldHVybiBpbnN0
YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUo
ZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5nZXQoZXhlYywg
a2V5KTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBz
aXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHNldChFeGVjU3RhdGUqLCBKU1ZhbHVl
IGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBi
b29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAgewor
ICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSwgdmFsdWUpOworICAgIH0KIAogcHJpdmF0ZToK
ICAgICBKU01hcChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uo
dm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX21hcERhdGEodm0sIHRoaXMpCiAgICAgewogICAg
IH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHNpemVf
dCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3Jl
KEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRv
U3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwotCi0gICAgTWFwRGF0YSBt
X21hcERhdGE7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
NiArMjYsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3Iu
aCIKIAorI2luY2x1ZGUgIkJ1aWx0aW5OYW1lcy5oIgorI2luY2x1ZGUgIkNvbW1vbklkZW50aWZp
ZXJzLmgiCisjaW5jbHVkZSAiSWRlbnRpZmllcklubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU01h
cC5oIgpAQCAtNDEsNiArNDQsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFwLnNldCh2
bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0ZXJhdG9yKHZtLCBtX21hcC0+aW1w
bCgpLT5oZWFkKCkpOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTQ5LDYgKzUzLDcgQEAgdm9pZCBK
U01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21h
cCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7CiB9CiAKIEpTVmFs
dWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgdmFsdWUpCkBAIC02Miw4ICs2Nyw5IEBAIEpTVmFsdWUgSlNNYXBJdGVy
YXRvcjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNNYXBJdGVyYXRvciogSlNNYXBJdGVyYXRvcjo6
Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBKU01hcEl0ZXJhdG9y
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJ
dGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwgbV9raW5kKTsKLSAgICBjbG9uZS0+bV9p
dGVyYXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IGNsb25lID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgpLCBtX2tpbmQpOwor
ICAgIGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAgICByZXR1cm4gY2xv
bmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgSlNNYXBJdGVyYXRvciA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4gSGFzaE1hcEJ1Y2tldFR5cGU7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CiAKQEAgLTUxLDUyICs1Miw2MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
VmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFu
Y2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWly
PEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBh
aXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogcHJldiA9IG1faXRlci5nZXQoKTsKKyAg
ICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUg
KGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tl
dDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAg
ICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAg
IHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRo
ZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9u
IGlzIGNhbGwgbmV4dCgpLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKyAgICBib29s
IG5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYg
KCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2lu
ZCA9PSBJdGVyYXRlVmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAg
ICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAobV9raW5k
ID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAg
ICAgdmFsdWUgPSBidWNrZXQtPmtleSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1
ZSA9IGNyZWF0ZVBhaXIoY2FsbEZyYW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAg
ICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT52YWx1
ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFs
dWUoSlNWYWx1ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAg
ICAgICBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBp
ZiAoIW1faXRlcmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1
Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBrZXkgPSBwYWlyLmtleTsKLSAgICAgICAgdmFs
dWUgPSBwYWlyLnZhbHVlOworICAgICAgICBrZXkgPSBidWNrZXQtPmtleSgpOworICAgICAgICB2
YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgdm9pZCBmaW5pc2goKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsKLSAg
ICB9Ci0KICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0K
ICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX21hcC5nZXQoKTsg
fQogICAgIEpTTWFwSXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNNYXA6Ok1h
cERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNNYXBJdGVyYXRvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCogaXRlcmF0ZWRPYmplY3QsIEl0ZXJhdGlv
bktpbmQga2luZCkKKyAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX21hcERhdGEuY3Jl
YXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQorICAgIHsgfQor
CisgICAgdm9pZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQp
CiAgICAgeworICAgICAgICBtX2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQpOwog
ICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBK
U01hcCopOwpAQCAtMTA0LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
TWFwPiBtX21hcDsKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7
CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBtX2l0ZXI7CiAgICAgSXRlcmF0
aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxMSArNTUsMTQgQEAgSlNNb2R1bGVMb2FkZXI6OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwg
UwogewogfQogCi12b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZWdpc3RyeSIpLCBKU01hcDo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVj
dHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0
cnVjdHVyZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBt
YXApOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDEwICs0NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJlYWR5ID0gNiwKICAgICB9
OwogCi0gICAgc3RhdGljIEpTTW9kdWxlTG9hZGVyKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNN
b2R1bGVMb2FkZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBK
U01vZHVsZUxvYWRlciogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1
bGVMb2FkZXI+KHZtLmhlYXApKSBKU01vZHVsZUxvYWRlcih2bSwgc3RydWN0dXJlKTsKLSAgICAg
ICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgb2Jq
ZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcmV0
dXJuIG9iamVjdDsKICAgICB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIEpTVmFs
dWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3Jk
LCBKU1ZhbHVlIGluaXRpYXRvcik7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNT
dGF0ZSosIFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxNCArNDcsMTcgQEAgdm9p
ZCBKU01vZHVsZVJlY29yZDo6ZGVzdHJveShKU0NlbGwqIGNlbAogICAgIHRoaXNPYmplY3QtPkpT
TW9kdWxlUmVjb3JkOjp+SlNNb2R1bGVSZWNvcmQoKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29y
ZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInJlZ2lzdHJ5RW50cnki
KSksIGpzVW5kZWZpbmVkKCkpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVkIikpLCBqc0Jvb2xlYW4oZmFsc2UpKTsK
IAotICAgIG1fZGVwZW5kZW5jaWVzTWFwLnNldCh2bSwgdGhpcywgSlNNYXA6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0KCktPm1hcFN0cnVjdHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMs
IHZtLCBnbG9iYWxPYmplY3QoKS0+bWFwU3RydWN0dXJlKCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgbV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlz
LCBtYXApOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFT
Q0lJTGl0ZXJhbCgiZGVwZW5kZW5jaWVzTWFwIikpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMTAgKzg3LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAotICAgIHN0YXRpYyBKU01vZHVsZVJlY29yZCogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRW
YXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisg
ICAgc3RhdGljIEpTTW9kdWxlUmVjb3JkKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xh
cmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVz
KQogICAgIHsKICAgICAgICAgSlNNb2R1bGVSZWNvcmQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVSZWNvcmQ+KHZtLmhlYXApKSBKU01vZHVsZVJlY29yZCh2
bSwgc3RydWN0dXJlLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBs
ZXhpY2FsVmFyaWFibGVzKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJik7CiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCogZ2V0TW9kdWxlTmFtZXNwYWNlKEV4ZWNTdGF0ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcwICsyNiwx
MyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAKLSNpbmNsdWRl
ICJDb3BpZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgot
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU1NldDo6c19pbmZv
ID0geyAiU2V0IiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU1NldCkg
fTsKIAotdm9pZCBKU1NldDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNTZXQqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU1NldDo6
fkpTU2V0KCk7Ci19Ci0KIFN0cmluZyBKU1NldDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0
KiwgRXhlY1N0YXRlKikKIHsKICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3QiKTsKIH0K
IAotc2l6ZV90IEpTU2V0Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU1Nl
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHNpemVfdCBzZXREYXRh
U2l6ZSA9IHRoaXNPYmplY3QtPm1fc2V0RGF0YS5jYXBhY2l0eUluQnl0ZXMoKTsKLSAgICByZXR1
cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIHNldERhdGFTaXplOwotfQotCi12b2lkIEpT
U2V0Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNT
ZXQqPihjZWxsKS0+bV9zZXREYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0K
LXZvaWQgSlNTZXQ6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYg
dmlzaXRvciwgQ29weVRva2VuIHRva2VuKQotewotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUo
Y2VsbCwgdmlzaXRvciwgdG9rZW4pOwotICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5tX3NldERh
dGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7Ci19Ci0KLWJvb2wgSlNTZXQ6Omhh
cyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0
YS5jb250YWlucyhleGVjLCB2YWx1ZSk7Ci19Ci0KLXNpemVfdCBKU1NldDo6c2l6ZShFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5zaXplKGV4ZWMpOwotfQotCi12b2lk
IEpTU2V0OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIG1fc2V0
RGF0YS5zZXQoZXhlYywgdGhpcywgdmFsdWUsIHZhbHVlKTsKLX0KLQotdm9pZCBKU1NldDo6Y2xl
YXIoRXhlY1N0YXRlKikKLXsKLSAgICBtX3NldERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBKU1Nl
dDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4g
bV9zZXREYXRhLnJlbW92ZShleGVjLCB2YWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTAzICsyNiw0NSBA
QAogI2lmbmRlZiBKU1NldF9oCiAjZGVmaW5lIEpTU2V0X2gKIAotI2luY2x1ZGUgIkpTRGVzdHJ1
Y3RpYmxlT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKLSNpbmNsdWRlICJNYXBEYXRh
LmgiCisjaW5jbHVkZSAiTWFwQmFzZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNT
ZXRJdGVyYXRvcjsKIAotY2xhc3MgSlNTZXQgOiBwdWJsaWMgSlNEZXN0cnVjdGlibGVPYmplY3Qg
eworY2xhc3MgSlNTZXQgOiBwdWJsaWMgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5Pj4geworICAgIHR5cGVkZWYgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5Pj4gQmFzZTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVzdHJ1Y3RpYmxl
T2JqZWN0IEJhc2U7CiAKICAgICBmcmllbmQgY2xhc3MgSlNTZXRJdGVyYXRvcjsKIAotICAgIC8v
IE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4gdGhpcyBsYXlv
dXQsIGFuZCBoYXZlIGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8VW5rbm93bj4K
LSAgICBjbGFzcyBFbnRyeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVCYXJyaWVyPFVu
a25vd24+IG1fa2V5OwotCi0gICAgcHVibGljOgotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8
VW5rbm93bj4mIGtleSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tl
eTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFs
dWUoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAg
IH0KLQotICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHNldEtleShWTSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFs
dWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpT
VmFsdWUga2V5KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVC
YXJyaWVyKGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiwgY29u
c3QgSlNDZWxsKiwgSlNWYWx1ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdm9p
ZCBjbGVhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LmNsZWFyKCk7Ci0gICAgICAg
IH0KLSAgICB9OwotCi0gICAgdHlwZWRlZiBNYXBEYXRhSW1wbDxFbnRyeSwgSlNTZXRJdGVyYXRv
cj4gU2V0RGF0YTsKLQogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6
OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUs
IFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oSlNTZXRUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3RhdGljIEpTU2V0KiBjcmVhdGUo
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShF
eGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAg
ICAgICBKU1NldCogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU1NldD4o
dm0uaGVhcCkpIEpTU2V0KHZtLCBzdHJ1Y3R1cmUpOwotICAgICAgICBpbnN0YW5jZS0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0p
OwogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgc3RhdGljIEpTU2V0KiBj
cmVhdGUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgYWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCiAgICAgewotICAg
ICAgICByZXR1cm4gY3JlYXRlKGV4ZWMtPnZtKCksIHN0cnVjdHVyZSk7CisgICAgICAgIG1fbWFw
LT5hZGQoZXhlYywga2V5KTsKICAgICB9CiAKLSAgICBib29sIGhhcyhFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKLSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGFkZChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0
ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotCiBwcml2YXRlOgog
ICAgIEpTU2V0KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2
bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fc2V0RGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAg
fQogCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgc2l6ZV90
IGVzdGltYXRlZFNpemUoSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihK
U0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUo
SlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJpbmcgdG9T
dHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0KLSAgICBTZXREYXRhIG1f
c2V0RGF0YTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2V0SXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MSw2
ICs0MSw3IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0aGlzLCBpdGVy
YXRlZE9iamVjdCk7CisgICAgc2V0SXRlcmF0b3Iodm0sIG1fc2V0LT5pbXBsKCktPmhlYWQoKSk7
CiB9CiAKIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNDksNiArNTAsNyBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlz
T2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlz
aXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKKyAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVyKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJh
dG9yOjpjcmVhdGVQYWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1
ZSB2YWx1ZSkKQEAgLTYyLDggKzY0LDkgQEAgSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQ
YWlyKENhbGxGcgogCiBKU1NldEl0ZXJhdG9yKiBKU1NldEl0ZXJhdG9yOjpjbG9uZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZShleGVj
LT52bSgpLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0
dXJlKCksIG1fc2V0LmdldCgpLCBtX2tpbmQpOwotICAgIGNsb25lLT5tX2l0ZXJhdG9yID0gbV9p
dGVyYXRvcjsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2xvbmUgPSBKU1Nl
dEl0ZXJhdG9yOjpjcmVhdGUodm0sIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0
SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1fa2luZCk7CisgICAgY2xvbmUtPnNl
dEl0ZXJhdG9yKHZtLCBtX2l0ZXIuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2
aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE2IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBKU1NldEl0ZXJhdG9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5
cGVkZWYgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4gSGFzaE1hcEJ1Y2tldFR5
cGU7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKQEAgLTUy
LDQ2ICs1Myw1OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAK
LSAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAg
IEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFuY2VJdGVyKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+
IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNo
TWFwQnVja2V0VHlwZSogcHJldiA9IG1faXRlci5nZXQoKTsKKyAgICAgICAgaWYgKCFwcmV2KQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBi
dWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAmJiBidWNrZXQt
PmRlbGV0ZWQoKSkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1
Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICghYnVja2V0KSB7
CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMt
PnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZhbHVlIHNpbmNl
IHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGwgbmV4dCgpLgor
ICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKworICAgIGJvb2wgbmV4dChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUq
IGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgICAgICBpZiAobV9raW5kID09IEl0ZXJhdGVWYWx1
ZSB8fCBtX2tpbmQgPT0gSXRlcmF0ZUtleSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci5rZXk7
CisgICAgICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLmtleSk7
CisgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVj
a2V0LT5rZXkoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgZmlu
aXNoKCkKLSAgICB7Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7Ci0gICAgfQotCiAgICAg
SXRlcmF0aW9uS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgSlNWYWx1
ZSBpdGVyYXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuZ2V0KCk7IH0KICAgICBKU1Nl
dEl0ZXJhdG9yKiBjbG9uZShFeGVjU3RhdGUqKTsKIAotICAgIEpTU2V0OjpTZXREYXRhOjpJdGVy
YXRvckRhdGEqIGl0ZXJhdG9yRGF0YSgpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faXRlcmF0
b3I7Ci0gICAgfQotCiBwcml2YXRlOgotICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQp
CisgICAgSlNTZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCos
IEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAg
ICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9iamVjdC0+bV9zZXREYXRhLmNyZWF0ZUl0ZXJhdG9y
RGF0YSh0aGlzKSkKICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7CiAgICAgfQogCisgICAg
dm9pZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCisgICAg
eworICAgICAgICBtX2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQpOyAKKyAgICB9
CisKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQq
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwg
SlNWYWx1ZSwgSlNWYWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAgICBK
U1NldDo6U2V0RGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJyaWVy
PEhhc2hNYXBCdWNrZXRUeXBlPiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9
OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3Ip
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDIw
NTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw4ICs4MiwxMCBAQCBlbnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogICAgIE1v
ZHVsZUVudmlyb25tZW50VHlwZSwKICAgICBSZWdFeHBPYmplY3RUeXBlLAogICAgIFByb3h5T2Jq
ZWN0VHlwZSwKKyAgICBKU01hcFR5cGUsCisgICAgSlNTZXRUeXBlLAogCi0gICAgTGFzdEpTQ09i
amVjdFR5cGUgPSBQcm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVjdFR5cGUgPSBKU1Nl
dFR5cGUsCiB9OwogCiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9PSBzaXplb2YodWlu
dDhfdCksIHNpemVvZl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCisKKyNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBI
YXNoTWFwQnVja2V0VHlwZT4KK3ZvaWQgTWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT46OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBNYXBC
YXNlKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8TWFwQmFzZSo+KGNlbGwpOworICAgIEJhc2U6
OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fbWFwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNr
ZXRUeXBlPgorc2l6ZV90IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+Ojplc3RpbWF0ZWRTaXpl
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSAr
IHN0YXRpY19jYXN0PE1hcEJhc2UqPihjZWxsKS0+bV9tYXAtPmFwcHJveGltYXRlU2l6ZSgpOwor
fQorCit0ZW1wbGF0ZSBjbGFzcyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4+OwordGVtcGxhdGUgY2xhc3MgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5Pj47CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRU
eXBlPgorY2xhc3MgTWFwQmFzZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBl
ZGVmIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPiBIYXNoTWFwSW1wbFR5cGU7CisgICAg
dHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CitwdWJsaWM6CisKKyAgICB0eXBlZGVmIEhh
c2hNYXBCdWNrZXRUeXBlIEJ1Y2tldFR5cGU7CisKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBz
aXplKEV4ZWNTdGF0ZSopCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnNpemUoKTsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmhhcyhleGVjLCBrZXkpOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAg
eworICAgICAgICBtX21hcC0+Y2xlYXIoZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBib29sIHJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbWFwLT5yZW1vdmUoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5m
aW5kQnVja2V0KGV4ZWMsIGtleSwgaGFzaCk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZkhhc2hNYXBJbXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoTWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT4sIG1fbWFwKTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIEhhc2hNYXBJbXBsVHlwZSogaW1wbCgpIHsgcmV0dXJuIG1fbWFwLmdldCgp
OyB9CisKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQor
ICAgIHsKKyAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEhhc2hNYXBJbXBsVHlwZSog
aW1wbCA9IEhhc2hNYXBJbXBsVHlwZTo6Y3JlYXRlKGV4ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9tYXAuc2V0KHZtLCB0aGlzLCBpbXBsKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBNYXBC
YXNlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3Ry
dWN0dXJlKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUo
SlNDZWxsKik7CisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90Vmlz
aXRvciYpOworCisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBJbXBsVHlwZT4gbV9tYXA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjIsOSArNjIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29u
cwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlv
bihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3Ry
dWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywg
ZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwotICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9u
KCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgSlNN
YXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7CisgICAgaWYg
KFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU1ZhbHVlKCkpOwotICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIG1h
cFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwog
ICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXBJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBNYXBJdGVyYXRvcgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVyYXRvci0+
bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Ci0g
ICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRl
SXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTQgKzcwLDEzIEBAIHZvaWQg
TWFwUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogICAgIEpTQ19OQVRJVkVfRlVO
Q1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBtYXBQcm90
b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFByb3RvRnVu
Y0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9U
UkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51
bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAgICBKU0Nf
TkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldEludHJpbnNp
Yyk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSwgSlNN
YXBIYXNJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7
CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlO
YW1lcy0+YnVpbHRpbk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jS2V5cywg
RG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSwgbWFw
UHJvdG9GdW5jVmFsdWVzLCBEb250RW51bSwgMCk7CiAKLSAgICAvLyBQcml2YXRlIGdldCAvIHNl
dCBvcGVyYXRpb25zLgotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIG1hcFBy
b3RvRnVuY0dldCwgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5n
ZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldElu
dHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9G
dW5jU2V0LCBEb250RW51bSwgMik7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0gSlNGdW5j
dGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVuY0VudHJp
ZXMpOwpAQCAtOTMsMTYgKzkyLDIxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRN
YXAoQ2FsbEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3Qo
KSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAgICAgICB0
aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxs
RnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAg
SlNNYXAqIG1hcCA9IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAgIGlmICgh
bWFwKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0
ZXJhbCgiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gbWFwOworCisgICAgaWYgKExJS0VM
WSh0aGlzVmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKQorICAgICAgICByZXR1
cm4ganNDYXN0PEpTTWFwKj4odGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJh
bWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAg
b2JqZWN0IikpOworICAgIHJldHVybiBudWxscHRyOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHByaXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFs
dWUgdmFsdWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbih2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+dHlw
ZSgpID09IEpTTWFwVHlwZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1h
cFByb3RvRnVuY0NsZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTg5LDExICsxOTMsNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVy
YXRlS2V5KSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJ
c01hcChFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oanNEeW5hbWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkp
OwotfQotCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0
b3IoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4o
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKTsKQEAgLTIwNiwxMyArMjA1LDEyIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBBU1NFUlQoanNEeW5hbWlj
Q2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU01hcEl0ZXJh
dG9yKiBpdGVyYXRvciA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkp
OwogICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1
ZShrZXksIHZhbHVlKSkgeworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGV4ZWMsIGtl
eSwgdmFsdWUpKSB7CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0PEpTQXJy
YXkqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCAwLCBrZXkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGly
ZWN0SW5kZXgoZXhlYywgMSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAJKHJldmlzaW9uIDIwNTMwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5RGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwyMiArMTkxLDYgQEAg
dm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAgIG1fYXR0cmlidXRl
cyAmPSB+UmVhZE9ubHk7CiB9CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQotewotICAgIGlmICghYS5pc051
bWJlcigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7
Ci0gICAgaWYgKCFiLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb3Vi
bGUgeCA9IGEuYXNOdW1iZXIoKTsKLSAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKLSAgICBi
b29sIHhJc05hTiA9IHN0ZDo6aXNuYW4oeCk7Ci0gICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFu
KHkpOwotICAgIGlmICh4SXNOYU4gfHwgeUlzTmFOKQotICAgICAgICByZXR1cm4geElzTmFOICYm
IHlJc05hTjsKLSAgICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNl
X2Nhc3Q8dWludDY0X3Q+KHkpOwotfQotCiBib29sIFByb3BlcnR5RGVzY3JpcHRvcjo6ZXF1YWxU
byhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKG90aGVyLm1fdmFsdWUuaXNFbXB0eSgpICE9IG1fdmFsdWUuaXNFbXB0eSgp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURl
c2NyaXB0b3IuaAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEdldHRlclNldHRlcjsKIAotLy8gU2VlIEVTNS4x
IDkuMTIKLWJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwotCiBj
bGFzcyBQcm9wZXJ0eURlc2NyaXB0b3IgewogcHVibGljOgogICAgIFByb3BlcnR5RGVzY3JpcHRv
cigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiAyMDUzMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDkgKzYzLDExIEBA
IHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkp
LT5nbG9iYWxPYmplY3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IEludGVybmFs
RnVuY3Rpb246OmNyZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgp
LCBnbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6
Y3JlYXRlKGV4ZWMsIHZtLCBzZXRTdHJ1Y3R1cmUpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5l
eGNlcHRpb24oKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsK
LSAgICBKU1NldCogc2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCBzZXRTdHJ1Y3R1cmUpOwogICAg
IEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUu
aXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0
ZXJhdG9yUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw3ICs2MCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3IK
IAogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1l
LCByZXN1bHQsIGZhbHNlKSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1Vu
ZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1NldFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAg
ICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1l
cy0+YWRkLCBzZXRQcm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgc2V0UHJv
dG9GdW5jQ2xlYXIsIERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQcm90b0Z1
bmNEZWxldGUsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVu
dW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJ
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEs
IEpTU2V0SGFzSW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJB
TlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFt
ZSgpLCBzZXRQcm90b0Z1bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1bmN0aW9u
KiB2YWx1ZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmluZygpLCBz
ZXRQcm90b0Z1bmNWYWx1ZXMpOwpAQCAtODcsMTYgKzg3LDE0IEBAIEFMV0FZU19JTkxJTkUgc3Rh
dGljIEpTU2V0KiBnZXRTZXQoQ2FsbEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlz
VmFsdWUuaXNPYmplY3QoKSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgp
KSkgewogICAgICAgICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5P
YmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9Ci0gICAgSlNTZXQqIHNldCA9IGpzRHluYW1pY0Nhc3Q8SlNTZXQqPih0aGlzVmFs
dWUpOwotICAgIGlmICghc2V0KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwg
c2NvcGUsIEFTQ0lJTGl0ZXJhbCgiU2V0IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVNldCBvYmpl
Y3QiKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gc2V0Owor
ICAgIGlmIChMSUtFTFkodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNTZXRUeXBlKSkK
KyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7CisgICAgdGhyb3dUeXBl
RXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0aW9uIGNhbGxl
ZCBvbiBub24tU2V0IG9iamVjdCIpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCkBAIC0xODYsNyArMTg0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2
YXRlRnVuYwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwgcmVz
dWx0KTsKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsK
ICAgICB9Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmNwcAkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiSlNJ
bnRlcm5hbFByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50
LmgiCiAjaW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJK
U1Byb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5o
IgogI2luY2x1ZGUgIkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgpAQCAtMjQ5LDYgKzI1MCwxMCBA
QCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFdF
QkFTU0VNQkxZKQogICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywg
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICNlbmRpZgorICAgIGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOworICAgIGhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmNy
ZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbE1hcFN0
cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXlWYWx1ZT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAK
ICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRl
KCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
LCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIE5h
dGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDUzMDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzEsNiArMzMxLDEwIEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJs
b2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3Ry
dWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0
dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmU7Cisg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiBoYXNoTWFwSW1wbFNldFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0
dXJlPiBoYXNoTWFwSW1wbE1hcFN0cnVjdHVyZTsKIAogICAgIFN0cm9uZzxKU0NlbGw+IGl0ZXJh
dGlvblRlcm1pbmF0b3I7CiAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yOwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1MzA1KQorKysgU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDktMDEg
IFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBKU01hcCBh
bmQgSlNTZXQgZmFzdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNjA5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q2xvbmVTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6
Q2xvbmVEZXNlcmlhbGl6ZXI6OmRlc2VyaWFsaXplKToKKwogMjAxNi0wOS0wMSAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCBNYWMgQ01h
a2UgYnVpbGQgYWZ0ZXIgcjIwNTI2Ni4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdI
ZWFkZXJzL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0hhc2hNYXBJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0hhc2hN
YXBJbXBsX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSGFzaE1hcEltcGxfaAorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0hhc2hNYXBJbXBsLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBCYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX01hcEJh
c2VfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9NYXBCYXNlX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9NYXBCYXNlLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjA1MzA1KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM2OCw3ICsxMzY4LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNv
ZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgY2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVu
dHJ5OiB7CiAgICAgICAgICAgICAgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBtYXBJdGVy
YXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKG1fZXhlYywga2V5
LCB2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVM
YXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVj
dFN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8
SlNNYXAqPihvYmplY3QpKTsKQEAgLTI1NDUsNyArMjU0NSw5IEBAIERlc2VyaWFsaXphdGlvblJl
c3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAgbWFwT2JqZWN0U3RhcnRTdGF0ZTogewog
ICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJS
ZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUo
KSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6
Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKG1fZXhlYywgbV9leGVjLT52bSgp
LCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKFVOTElL
RUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7
CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChtYXApOwogICAgICAgICAgICAgb3V0cHV0
T2JqZWN0U3RhY2suYXBwZW5kKG1hcCk7CiAgICAgICAgICAgICBtYXBTdGFjay5hcHBlbmQobWFw
KTsKQEAgLTI1NzQsNyArMjU3Niw5IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2Vy
aWFsaXplcjoKICAgICAgICAgc2V0T2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgaWYg
KG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxv
d0Vycm9yKTsKLSAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYy0+
dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIEpTU2V0
KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYywgbV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVj
dC0+c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFk
RXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBt
X2djQnVmZmVyLmFwcGVuZChzZXQpOwogICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBw
ZW5kKHNldCk7CiAgICAgICAgICAgICBzZXRTdGFjay5hcHBlbmQoc2V0KTsK
</data>
<flag name="review"
          id="311218"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288038</attachid>
            <date>2016-09-06 12:42:22 -0700</date>
            <delta_ts>2016-09-06 13:43:53 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>181758</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDU0OTUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU1IEBACisyMDE2LTA5LTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZGVuc2Ut
c2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGJlbmNoKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRoLWFkZGl0aW9ucy5qczogQWRkZWQuCisgICAgICAg
IChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvbGFyZ2Ut
bWFwLWl0ZXJhdGlvbi13aXRoLW11dGF0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6Cisg
ICAgICAgIChmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0
aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAq
IG1pY3JvYmVuY2htYXJrcy9tYXAtZ2V0LWdldC1jc2UuanM6IEFkZGVkLgorICAgICAgICAoYmFy
KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL21hcC1oYXMtZ2V0
LWNzZS1vcHBvcnR1bml0eS5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9v
KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvc3BhcnNlLXNldC5qczogQWRkZWQuCisgICAg
ICAgIChiZW5jaCk6CisgICAgICAgICogc3RyZXNzL21hcC1jc2UtY29ycmVjdG5lc3MuanM6IEFk
ZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3RIYXMpOgorICAgICAgICAodGVz
dEdldCk6CisgICAgICAgIChmb28pOgorICAgICAgICAqIHN0cmVzcy9tYXAtaXRlcmF0aW9uLmpz
OiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0MSk6CisgICAgICAgICh0
ZXN0Mik6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAgICh0ZXN0NCk6CisgICAgICAgICh0ZXN0
NSk6CisgICAgICAgICh0ZXN0Nik6CisgICAgICAgICh0ZXN0Nyk6CisgICAgICAgICh0ZXN0OCk6
CisgICAgICAgICh0ZXN0OSk6CisgICAgICAgICh0ZXN0MTApOgorICAgICAgICAodGVzdDExKToK
KyAgICAgICAgKHRlc3QxMik6CisgICAgICAgICh0ZXN0MTMpOgorICAgICAgICAodGVzdDE0KToK
KyAgICAgICAgKHRlc3QxNSk6CisgICAgICAgICh0ZXN0MTYpOgorICAgICAgICAodGVzdDE3KToK
KyAgICAgICAgKHRlc3QxOCk6CisKIDIwMTYtMDgtMzEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2NhdGVkIGluIEF1
eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlIGFuZCB3ZSBzaG91bGQg
cmV3cml0ZSBhcyBtdWNoIG9mIHRoZSBHQyBhcyBuZWVkZWQgdG8gbWFrZSB0aGlzIG5vdCBhIHJl
Z3Jlc3Npb24KSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbnNlLXNldC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHJldmlzaW9u
IDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIAorICAgIGZ1bmN0aW9uIGJl
bmNoKG5hbWUsIGYsIGFyZykgeworICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IGYoYXJnKTsKKyAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlOworICAg
ICAgICBjb25zdCB2ZXJib3NlID0gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgcHJpbnQobmFtZSArICIgIiArIHJlc3VsdCArICIgIiArIChlbmQtc3RhcnQpICsgIm1z
Iik7CisgICAgfQorCisgICAgdmFyIGRlbnNlU2V0ID0gbmV3IFNldDsKKyAgICB2YXIgZXhjbHVk
ZVNldCA9IFsxMjMsIDEyMzAsIDEyMzAwLCAxMjMwMDAsIDIzNCwgMjM0MCwgMjM0MDBdOworICAg
IGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IDVlNjsgKytpZHgpIHsKKyAgICAgICAgaWYgKGV4Y2x1
ZGVTZXQuaW5jbHVkZXMoaWR4KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkZW5z
ZVNldC5hZGQoaWR4KTsKKyAgICB9CisKKyAgICBiZW5jaCgiRGVuc2UgU2V0IFByb3BlcnR5IEV4
aXN0ZW5jZSIsIGZ1bmN0aW9uKHMpIHsKKyAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCA1ZTY7ICsraSkKKyAgICAgICAgICAgIGlmIChzLmhhcyhpKSkK
KyAgICAgICAgICAgICAgICBjb3VudCsrCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9LCBk
ZW5zZVNldCk7CisKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1t
YXAtaXRlcmF0aW9uLXdpdGgtYWRkaXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2xhcmdlLW1hcC1pdGVyYXRpb24td2l0aC1hZGRpdGlvbnMuanMJKHJldmlz
aW9uIDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdp
dGgtYWRkaXRpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2xldCBjb3Vu
dGVyID0gMDsKK2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0g
b2YgbWFwKSB7CisgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC45NSkgeworICAgICAgICAg
ICAgbWFwLnNldCgiIiArIGNvdW50ZXIsIGNvdW50ZXIpOworICAgICAgICAgICAgKytjb3VudGVy
OworICAgICAgICB9CisgICAgfQorfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKCkg
eworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsg
aSsrKQorICAgICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5v
dygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXAp
OworICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
cHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdpdGgtbXV0YXRpb24uanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRo
LW11dGF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFy
Z2UtbWFwLWl0ZXJhdGlvbi13aXRoLW11dGF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjUgQEAKK2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0g
b2YgbWFwKSB7CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICAgICAgaWYgKE1hdGgucmFuZG9t
KCkgPiAwLjk1KSB7CisgICAgICAgICAgICBtYXAuZGVsZXRlKGtleSk7CisgICAgICAgIH0KKyAg
ICB9Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9
IG5ldyBNYXA7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDsgaSsrKQorICAgICAgICBt
YXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXApOworICAgIGNvbnN0IHZl
cmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3co
KSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9s
YXJnZS1tYXAtaXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2xhcmdlLW1hcC1pdGVyYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjIgQEAKK2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0g
b2YgbWFwKSB7CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICB9Cit9Citub0lubGluZShiYXIp
OworCitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorICAgICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAg
ICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBp
KyspCisgICAgICAgIGJhcihtYXApOworICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9v
KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9tYXAtZ2V0LWdldC1jc2UuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFwLWdldC1nZXQtY3NlLmpzCShy
ZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFwLWdldC1nZXQtY3NlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKK2Z1bmN0aW9uIGJhcihtYXAsIHApIHsK
KyAgICByZXR1cm4gbWFwLmdldChwKSArIG1hcC5nZXQocCk7Cit9Citub0lubGluZShiYXIpOwor
CitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbGV0IGl0ZW1z
ID0gWworICAgICAgICBbMTAsIDUwXSwKKyAgICAgICAgWyI0NTAiLCA3OF0sCisgICAgICAgIFt7
fSwge31dLAorICAgICAgICBbU3ltYm9sKCksIHRydWVdLAorICAgICAgICBbdW5kZWZpbmVkLCBu
dWxsXSwKKyAgICAgICAgW3RydWUsIG51bGxdLAorICAgICAgICBbZmFsc2UsIHRydWVdLAorICAg
ICAgICBbNDUuODcsIHt9XQorICAgIF07CisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGl0
ZW1zKQorICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworICAgIGxldCBzdGFydCA9IERhdGUu
bm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyBpKyspCisgICAgICAgIGJh
cihtYXAsIGl0ZW1zW2kgJSBpdGVtcy5sZW5ndGhdWzBdKTsKKyAgICBjb25zdCB2ZXJib3NlID0g
ZmFsc2U7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KERhdGUubm93KCkgLSBzdGFy
dCk7Cit9Citmb28oKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL21hcC1oYXMtZ2V0
LWNzZS1vcHBvcnR1bml0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9tYXAtaGFzLWdldC1jc2Utb3Bwb3J0dW5pdHkuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9tYXAtaGFzLWdldC1jc2Utb3Bwb3J0dW5pdHkuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gYmFyKG1hcCwgcCkgeworICAgIGlmICht
YXAuaGFzKHApKQorICAgICAgICByZXR1cm4gbWFwLmdldChwKTsKK30KK25vSW5saW5lKGJhcik7
CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBsZXQgaXRl
bXMgPSBbCisgICAgICAgIFsxMCwgNTBdLAorICAgICAgICBbIjQ1MCIsIDc4XSwKKyAgICAgICAg
W3t9LCB7fV0sCisgICAgICAgIFtTeW1ib2woKSwgdHJ1ZV0sCisgICAgICAgIFt1bmRlZmluZWQs
IG51bGxdLAorICAgICAgICBbdHJ1ZSwgbnVsbF0sCisgICAgICAgIFtmYWxzZSwgdHJ1ZV0sCisg
ICAgICAgIFs0NS44Nywge31dCisgICAgXTsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Yg
aXRlbXMpCisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAgbGV0IHN0YXJ0ID0gRGF0
ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDA7IGkrKykKKyAgICAgICAg
YmFyKG1hcCwgaXRlbXNbaSAlIGl0ZW1zLmxlbmd0aF1bMF0pOworICAgIGNvbnN0IHZlcmJvc2Ug
PSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0
YXJ0KTsKK30KK2ZvbygpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvc3BhcnNlLXNl
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9zcGFyc2Utc2V0Lmpz
CShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvc3BhcnNlLXNldC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACisoZnVuY3Rpb24oKSB7CisgICAgCisgICAg
ZnVuY3Rpb24gYmVuY2gobmFtZSwgZiwgYXJnKSB7CisgICAgICAgIHZhciBzdGFydCA9IG5ldyBE
YXRlOworICAgICAgICB2YXIgcmVzdWx0ID0gZihhcmcpOworICAgICAgICB2YXIgZW5kID0gbmV3
IERhdGU7CisgICAgICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBwcmludChuYW1lICsgIiAiICsgcmVzdWx0ICsgIiAiICsgKGVuZC1z
dGFydCkgKyAibXMiKTsKKyAgICB9CisKKworICAgIHZhciBzcGFyc2VTZXQgPSBuZXcgU2V0Owor
ICAgIGZvciAodmFyIHggb2YgWzEyMywgMTIzMCwgMTIzMDAsIDEyMzAwMCwgMjM0LCAyMzQwLCAy
MzQwMF0pIHsKKyAgICAgICAgc3BhcnNlU2V0LmFkZCh4KTsKKyAgICB9CisKKyAgICBiZW5jaCgi
U3BhcnNlIFNldCBQcm9wZXJ0eSBFeGlzdGVuY2UiLCBmdW5jdGlvbihzKSB7CisgICAgICAgIHZh
ciBjb3VudCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNWU2OyArK2kpCisgICAg
ICAgICAgICBpZiAocy5oYXMoaSkpCisgICAgICAgICAgICAgICAgY291bnQrKworICAgICAgICBy
ZXR1cm4gY291bnQ7CisgICAgfSwgc3BhcnNlU2V0KTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0
cmVzcy9tYXAtY3NlLWNvcnJlY3RuZXNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNz
L21hcC1jc2UtY29ycmVjdG5lc3MuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9t
YXAtY3NlLWNvcnJlY3RuZXNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKK2Z1
bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkJhZCByZXN1bHQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiB0ZXN0SGFz
KG1hcCwga2V5LCBmKSB7CisgICAgbGV0IGZpcnN0ID0gbWFwLmhhcyhrZXkpOworICAgIGYoKTsK
KyAgICBsZXQgc2Vjb25kID0gbWFwLmhhcyhrZXkpOworICAgIHJldHVybiB7Zmlyc3QsIHNlY29u
ZH07Cit9Citub0lubGluZSh0ZXN0SGFzKTsKKworZnVuY3Rpb24gdGVzdEdldChtYXAsIGtleSwg
ZikgeworICAgIGxldCBmaXJzdCA9IG1hcC5nZXQoa2V5KTsKKyAgICBmKCk7CisgICAgbGV0IHNl
Y29uZCA9IG1hcC5nZXQoa2V5KTsKKyAgICByZXR1cm4ge2ZpcnN0LCBzZWNvbmR9OworfQorbm9J
bmxpbmUodGVzdEdldCk7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1h
cDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGxldCBr
ZXkgPSBpOworICAgICAgICBtYXAuc2V0KGtleSwga2V5KTsKKyAgICAgICAgbGV0IGYgPSAoKSA9
PiBtYXAuZGVsZXRlKGtleSk7CisgICAgICAgIG5vSW5saW5lKGYpOworICAgICAgICBsZXQge2Zp
cnN0LCBzZWNvbmR9ID0gdGVzdEhhcyhtYXAsIGtleSwgZik7CisgICAgICAgIGFzc2VydChmaXJz
dCk7CisgICAgICAgIGFzc2VydCghc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQga2V5ID0gaTsKKyAgICAgICAgbWFwLnNl
dChrZXksIGtleSk7CisgICAgICAgIGxldCBmID0gKCkgPT4ge307CisgICAgICAgIG5vSW5saW5l
KGYpOworICAgICAgICBsZXQge2ZpcnN0LCBzZWNvbmR9ID0gdGVzdEhhcyhtYXAsIGtleSwgZik7
CisgICAgICAgIGFzc2VydChmaXJzdCk7CisgICAgICAgIGFzc2VydChzZWNvbmQpOworICAgIH0K
KworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQg
a2V5ID0gaTsKKyAgICAgICAgbGV0IHZhbHVlID0ge307CisgICAgICAgIG1hcC5zZXQoa2V5LCB2
YWx1ZSk7CisgICAgICAgIGxldCBmID0gKCkgPT4gbWFwLmRlbGV0ZShrZXkpOworICAgICAgICBu
b0lubGluZShmKTsKKyAgICAgICAgbGV0IHtmaXJzdCwgc2Vjb25kfSA9IHRlc3RHZXQobWFwLCBr
ZXksIGYpOworICAgICAgICBhc3NlcnQoZmlyc3QgPT09IHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0
KHNlY29uZCA9PT0gdW5kZWZpbmVkKTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDA7IGkrKykgeworICAgICAgICBsZXQga2V5ID0gaTsKKyAgICAgICAgbGV0IHZhbHVlID0g
e307CisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAgICAgIGxldCBmID0gKCkgPT4g
e307CisgICAgICAgIG5vSW5saW5lKGYpOworICAgICAgICBsZXQge2ZpcnN0LCBzZWNvbmR9ID0g
dGVzdEdldChtYXAsIGtleSwgZik7CisgICAgICAgIGFzc2VydChmaXJzdCA9PT0gdmFsdWUpOwor
ICAgICAgICBhc3NlcnQoc2Vjb25kID09PSB2YWx1ZSk7CisgICAgfQorfQorZm9vKCk7CkluZGV4
OiBKU1Rlc3RzL3N0cmVzcy9tYXAtaXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
c3RyZXNzL21hcC1pdGVyYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9t
YXAtaXRlcmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzk1IEBACitmdW5jdGlv
biBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
cmVzdWx0ISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7Cisg
ICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIGxldCBpdGVy
ID0gbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIu
bmV4dCgpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gMjApOworICAgIGFzc2VydCh2YWx1ZVsx
XSA9PT0gMzApOworICAgIGFzc2VydCghZG9uZSk7CisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVy
Lm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZp
bmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDEoKTsKKwor
ZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgy
MCwgMzApOworICAgIGxldCBpdGVyID0gbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBsZXQg
e3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gMjAp
OworICAgIGFzc2VydCh2YWx1ZVsxXSA9PT0gMzApOworICAgIGFzc2VydCghZG9uZSk7CisKKyAg
ICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAg
YXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgbWFwLnNldCg0MCwgNTApOworICAg
ICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydChkb25lKTsKKyAgICBh
c3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsg
aSsrKQorICAgIHRlc3QyKCk7CisKK2Z1bmN0aW9uIHRlc3QzKCkgeworICAgIGxldCBtYXAgPSBu
ZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAg
bGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOworICAgIGxldCB7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KHZhbHVlWzBdID09PSAyMCk7CisgICAgYXNzZXJ0
KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKworICAgICh7dmFsdWUsIGRv
bmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVl
WzBdID09PSA1MCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSA2MCk7CisKKyAgICBtYXAuc2V0
KCJmb28iLCAiYmFyIik7CisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAg
YXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWVbMF0gPT09ICJmb28iKTsKKyAgICBhc3Nl
cnQodmFsdWVbMV0gPT09ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0
KCkpOworICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7
Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QzKCk7CisKK2Z1bmN0
aW9uIHRlc3Q0KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMw
KTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJh
dG9yXSgpOworICAgIGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0
KHZhbHVlWzBdID09PSAyMCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNz
ZXJ0KCFkb25lKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDQoKTsK
KworZnVuY3Rpb24gdGVzdDUoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNl
dCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcFtTeW1i
b2wuaXRlcmF0b3JdKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAg
ICBhc3NlcnQodmFsdWVbMF0gPT09IDIwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0gPT09IDMwKTsK
KyAgICBhc3NlcnQoIWRvbmUpOworCisgICAgbWFwLmNsZWFyKCk7CisgICAgbWFwLnNldCg1MCwg
NjApOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KCFk
b25lKTsKKyAgICBhc3NlcnQodmFsdWVbMF0gPT09IDUwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0g
PT09IDYwKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2Vy
dChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3Q1KCk7CisgCitmdW5jdGlvbiB0ZXN0NigpIHsK
KyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbGV0IGkg
PSAwOworICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgbWFwLmRl
bGV0ZShrZXkpOworICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworICAgICAgICBpKys7Cisg
ICAgICAgIGlmIChpID09PSAxMDAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGFz
c2VydChpID09PSAxMDAwKTsKK30KK3Rlc3Q2KCk7CisKK2Z1bmN0aW9uIHRlc3Q3KCkgeworICAg
IGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaSA9IDA7
CisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG1hcCkgeworICAgICAgICBtYXAuY2xlYXIo
KTsKKyAgICAgICAgbWFwLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgaSsrOworICAgICAgICBp
ZiAoaSA9PT0gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhc3NlcnQoaSA9
PT0gMTAwMCk7Cit9Cit0ZXN0NygpOworCitmdW5jdGlvbiB0ZXN0OCgpIHsKKyAgICBsZXQgbWFw
ID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCA1MDA7IGkrKykKKyAgICAgICAgbWFwLnNldChpLCBpKTsKKyAgICBsZXQgaSA9IDA7CisgICAg
Zm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG1hcCkgeworICAgICAgICBhc3NlcnQoa2V5ID09PSB2
YWx1ZSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgaWYgKGtleSA9PT0gMjUwKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGFzc2VydChpID09PSAyNTEpOworfQordGVzdDgoKTsKKwor
ZnVuY3Rpb24gdGVzdDkoKSB7CisgICAgYXNzZXJ0KDEvKC0wKSA9PT0gLUluZmluaXR5KTsKKwor
ICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoLTAsIDUwKTsgLy8gV2Ugc2hvdWxk
IG5vcm1hbGl6ZSAtMCB0byArMCBpbiB0aGUga2V5LgorICAgIGZvciAobGV0IFtrZXksIHZhbHVl
XSBvZiBtYXApIHsKKyAgICAgICAgYXNzZXJ0KDEva2V5ID09PSBJbmZpbml0eSk7CisgICAgfQor
ICAgIGFzc2VydChtYXAuZ2V0KDAuMCkgPT09IDUwKTsKKyAgICBhc3NlcnQobWFwLmdldCgwKSA9
PT0gNTApOworICAgIGFzc2VydChtYXAuZ2V0KC0wKSA9PT0gNTApOworICAgIGFzc2VydChtYXAu
Z2V0KCswKSA9PT0gNTApOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0
ZXN0OSgpOworCitmdW5jdGlvbiB0ZXN0MTAoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7Cisg
ICAgbWFwLnNldCgibmVnWmVybyIsIC0wKTsgLy8gV2Ugc2hvdWxkICpub3QqIG5vcm1hbGl6ZSAt
MCB0byArMCBpbiB0aGUgdmFsdWUuCisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG1hcCkg
eworICAgICAgICBhc3NlcnQoMS92YWx1ZSA9PT0gLUluZmluaXR5KTsKKyAgICB9Cit9Citmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxMCgpOworCitmdW5jdGlvbiB0ZXN0
MTEoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAg
IGxldCBpdGVyID0gbWFwLmtleXMoKTsKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4
dCgpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAyMCk7CisKKyAg
ICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAg
YXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVy
Lm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmlu
ZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTEoKTsKKwor
ZnVuY3Rpb24gdGVzdDEyKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQo
MjAsIDMwKTsKKyAgICBsZXQgaXRlciA9IG1hcC52YWx1ZXMoKTsKKyAgICBsZXQge3ZhbHVlLCBk
b25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVl
ID09PSAzMCk7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3Nl
cnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgKHt2YWx1
ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAg
ICB0ZXN0MTIoKTsKKworZnVuY3Rpb24gdGVzdDEzKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFw
OworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0
ZXIgPSBtYXAua2V5cygpOworICAgIGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7Cisg
ICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDIwKTsKKworICAgIG1hcC5j
bGVhcigpOworICAgIG1hcC5zZXQoImZvbyIsICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09
PSAiZm9vIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2Vy
dChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxMygpOworCitmdW5jdGlvbiB0ZXN0MTQoKSB7
CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIG1hcC5z
ZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcC52YWx1ZXMoKTsKKyAgICBsZXQge3ZhbHVl
LCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlID09PSAzMCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKyAgICBtYXAuc2V0KCJmb28iLCAiYmFy
Iik7CisKKyAgICA7KHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRv
bmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1
bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTQo
KTsKKworZnVuY3Rpb24gdGVzdDE1KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1h
cC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXAu
a2V5cygpOworCisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3Nl
cnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMjApOworCisgICAgOyh7dmFsdWUsIGRv
bmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUg
PT09IDUwKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIp
OworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUp
OworICAgIGFzc2VydCh2YWx1ZSA9PT0gImZvbyIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRl
ZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTUoKTsK
KworZnVuY3Rpb24gdGVzdDE2KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5z
ZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXAudmFs
dWVzKCk7CisKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2Vy
dCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAzMCk7CisKKyAgICA7KHt2YWx1ZSwgZG9u
ZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9
PT0gNjApOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBtYXAuc2V0KCJmb28iLCAiYmFyIik7
CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydCghZG9uZSk7
CisgICAgYXNzZXJ0KHZhbHVlID09PSAiYmFyIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0
ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVm
aW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxNigpOwor
CitmdW5jdGlvbiB0ZXN0MTcoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNl
dCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcC5rZXlz
KCk7CisKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCgh
ZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAyMCk7CisKKyAgICA7KHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0g
NTApOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBtYXAuc2V0KCJmb28iLCAiYmFyIik7CisK
KyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydCghZG9uZSk7Cisg
ICAgYXNzZXJ0KHZhbHVlID09PSAiZm9vIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIu
bmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5l
ZCk7CisKKyAgICBtYXAuc2V0KCJoZWxsbyIsICJ3b3JsZCIpOworICAgICh7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0g
dW5kZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDE3
KCk7CisKK2Z1bmN0aW9uIHRlc3QxOCgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBt
YXAuc2V0KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFw
LnZhbHVlcygpOworCisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBh
c3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMzApOworCisgICAgOyh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09IDYwKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJh
ciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRv
bmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1
bmRlZmluZWQpOworCisgICAgbWFwLnNldCgiaGVsbG8iLCAid29ybGQiKTsKKyAgICAoe3ZhbHVl
LCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAg
IHRlc3QxOCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzAwIEBACisyMDE2LTA5LTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZhbXBzIGhvdyB3ZSBp
bXBsZW1lbnQgTWFwIGFuZCBTZXQuIEl0IHVzZXMKKyAgICAgICAgYSBuZXcgaGFzaCBtYXAgaW1w
bGVtZW50YXRpb24uIFRoZSBoYXNoIG1hcCB1c2VzIGxpbmVhcgorICAgICAgICBwcm9iaW5nIGFu
ZCBpdCB1c2VzIFdhbmcncyA2NCBiaXQgaGFzaCBmdW5jdGlvbiBmb3IgSlNWYWx1ZXMKKyAgICAg
ICAgdGhhdCBhcmVuJ3Qgc3RyaW5ncy4gU3RyaW5ncyB1c2UgU3RyaW5nSW1wbCdzIGhhc2ggZnVu
Y3Rpb24uCisgICAgICAgIFRoZSByZWFzb24gSSB3YW50ZWQgdG8gcm9sbCBvdXIgb3duIEhhc2hU
YWJsZSBpcyB0d29mb2xkOgorICAgICAgICBJIGRpZG4ndCB3YW50IHRvIGlubGluZSBXVEY6Okhh
c2hNYXAncyBpbXBsZW1lbnRhdGlvbiBpbnRvIG91cgorICAgICAgICBKSVQsIHNpbmNlIHRoYXQg
c2VlbXMgZXJyb3IgcHJvbmUgYW5kIHVubWFpbnRhaW5hYmxlLiBBbHNvLCBJIHdhbnRlZAorICAg
ICAgICBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIGhhc2ggbWFwIGJ1Y2tldHMgd2hlcmUgYnVj
a2V0cyBhbHNvIGV4aXN0IGluCisgICAgICAgIGEgbGlua2VkIGxpc3QuCisKKyAgICAgICAgVGhl
IHJlYXNvbiBmb3IgbWFraW5nIGJ1Y2tldHMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IGlzIHRoYXQg
aXRlcmF0aW9uCisgICAgICAgIGlzIG5vdyBzaW1wbGUuIEl0ZXJhdGlvbiB3b3JrcyBieSBqdXN0
IHRyYXZlcnNpbmcgYSBsaW5rZWQgbGlzdC4KKyAgICAgICAgVGhpcyBkZXNpZ24gYWxzbyBhbGxv
d3MgZm9yIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIHdoZW4gZG9pbmcgaXRlcmF0aW9uCisgICAg
ICAgIHdoaWxlIHRoZSBoYXNoIHRhYmxlIGlzIG11dGF0aW5nLiBXaGVuZXZlciB3ZSByZW1vdmUg
YSBidWNrZXQgZnJvbQorICAgICAgICB0aGUgaGFzaCB0YWJsZSwgaXQgaXMgcmVtb3ZlZCBmcm9t
IHRoZSBsaXN0LCBtZWFuaW5nIGl0ZW1zIGluIHRoZQorICAgICAgICBsaXN0IGRvbid0IHBvaW50
IHRvIGl0LiBIb3dldmVyLCB0aGUgcmVtb3ZlZCBidWNrZXQgd2lsbCBzdGlsbCBwb2ludAorICAg
ICAgICB0byB0aGluZ3MgdGhhdCBhcmUgZWl0aGVyIGluIHRoZSBsaXN0LCBvciBoYXZlIGFsc28g
YmVlbiByZW1vdmVkLgorICAgICAgICBlLmcsIGZyb20gYSByZW1vdmVkIGJ1Y2tldCwgeW91IGNh
biBhbHdheXMgZm9sbG93IHBvaW50ZXJzIHVudGlsIHlvdQorICAgICAgICBlaXRoZXIgZmluZCBh
biBpdGVtIGluIHRoZSBsaXN0LCBvciB5b3UgZmluZCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAg
ICAgICAgVGhpcyBpcyBhIHJlYWxseSBuaWNlIHByb3BlcnR5IGJlY2F1c2UgaXQgbWVhbnMgdGhh
dCBhIE1hcCBvciBTZXQKKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byByZWFzb24gYWJvdXQgdGhl
IGFsbCB0aGUgaXRlcmF0b3JzIHRoYXQgcG9pbnQKKyAgICAgICAgaW50byBpdHMgbGlzdC4gQWxz
bywgd2hlbmV2ZXIgd2UgYWRkIGl0ZW1zIHRvIHRoZSBNYXAgb3IgU2V0LCB3ZQorICAgICAgICBo
aWphY2sgdGhlIHRhaWwgYXMgdGhlIG5ldyBpdGVtLCBhbmQgbWFrZSB0aGUgbmV3IGl0ZW0gcG9p
bnQgdG8gYSBuZXdseQorICAgICAgICBjcmVhdGVkIHRhaWwuIFRoaXMgbWVhbnMgdGhhdCBhbnkg
aXRlcmF0b3IgdGhhdCBwb2ludGVkIHRvIHRoZSAidGFpbCIgbm93CisgICAgICAgIHBvaW50cyB0
byBub24tdGFpbCBpdGVtcy4gVGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYWRkaW5n
IHRoaW5ncworICAgICAgICB0byB0aGUgTWFwL1NldCB3aGlsZSBpdGVyYXRpbmcgZWFzeS4KKwor
ICAgICAgICBJIGFsc28gbWFkZSBNYXAucHJvdG90eXBlLmdldCwgTWFwLnByb3RvdHlwZS5oYXMs
IGFuZCBTZXQucHJvdG90eXBlLmhhcworICAgICAgICBpbnRvIGludHJpbnNpY3MgaW4gdGhlIERG
Ry4gVGhlIElSIGNhbiBub3cgcmVhc29uIGFib3V0IGhhc2ggbWFwCisgICAgICAgIG9wZXJhdGlv
bnMgYW5kIGNhbiBldmVuIGRvIENTRSBvdmVyIFdhbmcncyBoYXNoIGZ1bmN0aW9uLCBoYXNoIG1h
cAorICAgICAgICBidWNrZXQgbG9va3VwcywgaGFzaCBtYXAgYnVja2V0IGxvYWRzLCBhbmQgdGVz
dGluZyBpZiBhIGtleSBpcyBpbgorICAgICAgICB0aGUgaGFzaCB0YWJsZS4gVGhpcyBtYWtlcyBj
b2RlIHBhdHRlcm5zIGZvciBNYXAgbGlrZSBzbywgc3VwZXIgZmFzdAorICAgICAgICBpbiB0aGUg
RlRMLCBzaW5jZSB3ZSB3aWxsIG9ubHkgYmUgZG9pbmcgYSBzaW5nbGUgaGFzaCBhbmQgaGFzaCBi
dWNrZXQgbG9va3VwOgorCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBnZXRLZXlJZlBy
ZXNlbnQobWFwLCBrZXkpIHsKKyAgICAgICAgICAgIGlmIChtYXAuaGFzKGtleSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hcC5nZXQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKwor
ICAgICAgICBUaGlzIHBhdGNoIGlzIHJvdWdobHkgYW4gOCUgc3BlZWR1cCBvbiBFUzZTYW1wbGVC
ZW5jaC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgor
ICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbCk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAg
ICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAg
ICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2hpZnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkVkZ2U6Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRml4
dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24p
OgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlTWFwT2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlU2V0T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdVc2VLaW5kLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6Cisg
ICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVy
Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGwpOgorICAgICAgICAqIGZ0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1h
cEhhc2gpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0
TWFwQnVja2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUxvYWRGcm9tSlNNYXBCdWNrZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6Omxvd01hcE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6Omxvd1NldE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6Omxvd01hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OnNwZWN1bGF0ZU1hcE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OnNwZWN1bGF0ZVNldE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnNldE1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6Omxvd1JlZ0V4cE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6Omxvd1N0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpzcGVjdWxhdGVSZWdFeHBPYmplY3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpzZXRTdG9yYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjp3YW5nc0ludDY0SGFzaCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJs
ZU9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBwYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVBbmFs
eXplcjo6TW9kdWxlQW5hbHl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNr
aW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNlbGVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
Okhhc2hNYXBCdWNrZXQ6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBC
dWNrZXQ6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6Okhhc2hNYXBCdWNr
ZXQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpzZXROZXh0KToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEJ1Y2tldDo6c2V0UHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6
OnNldEtleSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6a2V5KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tl
dDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpuZXh0KToKKyAgICAgICAg
KEpTQzo6SGFzaE1hcEJ1Y2tldDo6cHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6
OmRlbGV0ZWQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpzZXREZWxldGVkKToKKyAg
ICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6b2Zmc2V0T2ZLZXkpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwQnVja2V0OjpvZmZzZXRPZlZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZl
cjo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpidWZmZXIp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjph
cmVLZXlzRXF1YWwpOgorICAgICAgICAoSlNDOjpub3JtYWxpemVNYXBLZXkpOgorICAgICAgICAo
SlNDOjpqc01hcEhhc2gpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6c2VsZWN0U3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6Okhhc2hNYXBJbXBsOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1w
bDo6SGFzaE1hcEltcGwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SGFzaE1hcEltcGw6OmVtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNF
bXB0eSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpkZWxldGVkVmFsdWUpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNEZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcElt
cGw6OmZpbmRCdWNrZXQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6SGFzaE1hcEltcGw6Omhhcyk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjph
ZGQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6
SGFzaE1hcEltcGw6OnNpemUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Y2xlYXIpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyU2l6ZUluQnl0ZXMpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6b2Zmc2V0T2ZCdWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFw
SW1wbDo6b2Zmc2V0T2ZDYXBhY2l0eSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpoZWFk
KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnRhaWwpOgorICAgICAgICAoSlNDOjpIYXNo
TWFwSW1wbDo6YXBwcm94aW1hdGVTaXplKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZp
bmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6Okhhc2hN
YXBJbXBsOjpyZWhhc2gpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6bWFrZUFuZFNldE5l
d0J1ZmZlcik6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OnNhbWVWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmRlc3Ryb3kpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6ZXN0aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNNYXA6OmNvcHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6
aGFzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNpemUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKU01hcDo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNN
YXAuaDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTTWFwOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU01hcDo6Z2V0KToKKyAgICAgICAg
KEpTQzo6SlNNYXA6OnNldCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpKU01hcCk6CisgICAgICAg
IChKU0M6OkpTTWFwOjpFbnRyeTo6a2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6
OkVudHJ5Ojp2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRLZXlXaXRob3V0V3Jp
dGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpT
TWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmNsb25lKToK
KyAgICAgICAgKiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJ
dGVyYXRvcjo6YWR2YW5jZUl0ZXIpOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpuZXh0
KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6bmV4dEtleVZhbHVlKToKKyAgICAgICAg
KEpTQzo6SlNNYXBJdGVyYXRvcjo6SlNNYXBJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTTWFw
SXRlcmF0b3I6OnNldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6Zmlu
aXNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6aXRlcmF0b3JEYXRh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmg6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlND
OjpKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNN
b2R1bGVSZWNvcmQuaDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OmVzdGltYXRlZFNpemUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1NldDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTU2V0Ojpjb3B5QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZXQ6Omhhcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpzaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
U2V0OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpyZW1vdmUpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXQuaDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpKU1NldDo6YWRkKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkpTU2V0KToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OkVudHJ5OjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6
RW50cnk6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2aXNp
dENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleVdpdGhvdXRXcml0
ZUJhcnJpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldFZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNT
ZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6Y2xvbmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0
ZXJhdG9yOjphZHZhbmNlSXRlcik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6Om5leHQp
OgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SlNTZXRJdGVyYXRvcjo6c2V0SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1NldEl0
ZXJhdG9yOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpp
dGVyYXRvckRhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAg
ICAgICogcnVudGltZS9NYXBCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcEJhc2U8
SGFzaE1hcEJ1Y2tldFR5cGU+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6TWFwQmFz
ZTxIYXNoTWFwQnVja2V0VHlwZT46OmVzdGltYXRlZFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
TWFwQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6c2l6ZSk6CisgICAgICAg
IChKU0M6Ok1hcEJhc2U6Omhhcyk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6OmNsZWFyKToKKyAg
ICAgICAgKEpTQzo6TWFwQmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6Zmlu
ZEJ1Y2tldCk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6Om9mZnNldE9mSGFzaE1hcEltcGwpOgor
ICAgICAgICAoSlNDOjpNYXBCYXNlOjppbXBsKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpNYXBCYXNlOjpNYXBCYXNlKToKKyAgICAgICAg
KiBydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFw
KToKKyAgICAgICAgKiBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9N
YXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0TWFwKToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJ
c01hcCk6CisgICAgICAgIChKU0M6OnByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OnNhbWVW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoK
KyAgICAgICAgKiBydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0U2V0KToKKyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICog
cnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0U2V0KToKKyAgICAgICAgKEpTQzo6cHJp
dmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAg
ICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNi0wOS0w
NiAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAg
U2lsZW5jZSBHQ0Mgd2FybmluZyBzcGFtIGludHJvZHVjZWQgaW4gcjIwNTQ2MgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02NzIsNiAr
NjcyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0dlbmVyYXRv
ckZ1bmN0aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNw
cAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAorICAgIHJ1bnRpbWUvSGFzaE1hcEltcGwu
Y3BwCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmNwcAogICAgIHJ1bnRpbWUvSW5kZXhpbmdUeXBl
LmNwcAogICAgIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcApAQCAtNzU3LDYgKzc1OCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUu
Y3BwCiAgICAgcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAogICAgIHJ1bnRpbWUvTG9va3VwLmNw
cAorICAgIHJ1bnRpbWUvTWFwQmFzZS5jcHAKICAgICBydW50aW1lL01hcENvbnN0cnVjdG9yLmNw
cAogICAgIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9NYXBQ
cm90b3R5cGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTgsMTAgKzEzMTgsMTQgQEAK
IAkJNzkyMzNDMkIxRDM0NzE1NzAwQzVBODM0IC8qIEpJVE1hdGhJQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyMzNDMjkxRDM0NzE1NzAwQzVBODM0
IC8qIEpJVE1hdGhJQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0
NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OwogCQk3OTJD
QjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FG
MyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTc5NUIxOTk3MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk1
MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLzsgfTsKKwkJNzk1QjE5OTgxRDc4QkUz
NTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2NDY1NkExQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3
RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJ
CTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09y
aWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTc5QTA5MDdGMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RDFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovOyB9OworCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTIyODM1MUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRo
UHJvZmlsZS5jcHAgKi87IH07CiAJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgfTsKIAkJNzlBRjBC
RTQxRDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1
RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTY5LDEwICszNTczLDE0IEBACiAJCTc5MjMzQzI5
MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUTWF0aElDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MkNC
MzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQQ1RvQ29kZU9y
aWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTVCMTk5NTFENzhCRTM1
MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNYXBCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk1QjE5OTYx
RDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFwQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFC
OTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0Uw
N0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E4MUI4RkNGQjkw
MDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3Jp
Z2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1h
cC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTc5QTA5MDdEMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIYXNoTWFwSW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFw
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWFwSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzMzFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFy
aXRoUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QTIyODM0MUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXJpdGhQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
QTg5OUZFMUQzODYxMkUwMEQxOEM3MyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRNYXRoSUNGb3J3YXJkcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTgyNSw2ICs1ODMzLDggQEAKIAkJCQk3OTY0NjU2ODFCOTUyRkYw
MDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovLAogCQkJCUJDMDJFOUI4MEUxODQ1NDUwMDBGOTI5
NyAvKiBHZXR0ZXJTZXR0ZXIuY3BwICovLAogCQkJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAv
KiBHZXR0ZXJTZXR0ZXIuaCAqLywKKwkJCQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuY3BwICovLAorCQkJCTc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFw
SW1wbC5oICovLAogCQkJCTkzM0EzNDlEMDM4QUU4MEYwMDg2MzVDRSAvKiBJZGVudGlmaWVyLmNw
cCAqLywKIAkJCQk5MzNBMzQ5QTAzOEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovLAog
CQkJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oICovLApA
QCAtNjAzNSw2ICs2MDQ1LDggQEAKIAkJCQlBN0UyRUE2OTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0
ZXJhbFBhcnNlci5oICovLAogCQkJCUY2OTJBODY4MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAu
Y3BwICovLAogCQkJCUY2OTJBODY5MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAuaCAqLywKKwkJ
CQk3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi8sCisJCQkJNzk1QjE5
OTYxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCAqLywKIAkJCQlBNzAwODczNzE3Q0JFODUz
MDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3MDA4NzM4MTdDQkU4NTMw
MEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3ODUwN0Q1MTdDQkM2RkQwMDEx
RjZFNyAvKiBNYXBEYXRhLmggKi8sCkBAIC03MzI2LDYgKzczMzgsNyBAQAogCQkJCTBGNjRCMjdB
MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4
REUwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJF
QzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3OTVCMTk5ODFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExp
bmtJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyog
Q2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQ5Myw2ICs3NTA2LDcgQEAKIAkJ
CQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdGb3JBbGxLaWxs
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hN
YXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJC
MkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzgx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTkyMjUsNiAr
OTIzOSw3IEBACiAJCQkJMEYwMzMyQzAxOEFERkFFMTAwNUY5NzlBIC8qIEV4aXRpbmdKSVRUeXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0
S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEExQzE3MDhCMDA3MDBCQjcyMkMgLyog
RlRMQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5QTA5MDdGMUQ3Njg0NjUw
MDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEExRTE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjkzMjc0RDFDMUY2NkFBMDBDRjY1NjQgLyogR1BSSW5mby5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjQ4NTMyNzE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVj
b3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MjY5LDYgKzkyODQsNyBAQAogCQkJCTUyQjMx
MEZEMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkU0QkZGMkIxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJp
ZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNDMTA3RUMzNzYwMDQyN0E0OCAvKiBG
dW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OTVCMTk5NzFENzhCRTM1
MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQyRDM4RjFBREYx
MDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
QUFDRTYzQzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAog
I2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5j
bHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCiAjaW5j
bHVkZSAiVmFsdWVQcm9maWxlLmgiCkBAIC0zNDYsNiArMzQ4LDEyIEBAIFNwZWN1bGF0ZWRUeXBl
IHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbygKIAogICAgIGlmIChjbGFzc0luZm8gPT0gUmVnRXhw
T2JqZWN0OjppbmZvKCkpCiAgICAgICAgIHJldHVybiBTcGVjUmVnRXhwT2JqZWN0OworCisgICAg
aWYgKGNsYXNzSW5mbyA9PSBKU01hcDo6aW5mbygpKQorICAgICAgICByZXR1cm4gU3BlY01hcE9i
amVjdDsKKworICAgIGlmIChjbGFzc0luZm8gPT0gSlNTZXQ6OmluZm8oKSkKKyAgICAgICAgcmV0
dXJuIFNwZWNTZXRPYmplY3Q7CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09m
KEpTRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAko
cmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDQxICszOSw0MyBAQCBjbGFzcyBTdHJ1
Y3R1cmU7CiAKIHR5cGVkZWYgdWludDY0X3QgU3BlY3VsYXRlZFR5cGU7CiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY05vbmUgICAgICAgICAgICAgICA9IDA7IC8vIFdlIGRvbid0IGtu
b3cgYW55dGhpbmcgeWV0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGaW5hbE9i
amVjdCAgICAgICAgPSAxdSA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAx
dSA8PCAxOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0FycmF5Lgotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNGdW5jdGlvbiAgICAgICAgICAgPSAxdSA8PCAyOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBKU0Z1bmN0aW9uLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ4
QXJyYXkgICAgICAgICAgPSAxdSA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5
IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjSW50MTZBcnJheSAgICAgICAgID0gMXUgPDwgNDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNJbnQzMkFycmF5ICAgICAgICAgPSAxdSA8PCA1OyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gSW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4QXJyYXkgICAgICAgICA9IDF1IDw8IDY7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXUgPDwgNzsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQ4Q2xhbXBlZEFycmF5IG9yIG9uZSBvZiBpdHMgc3Vi
Y2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDE2QXJyYXkgICAg
ICAgID0gMXUgPDwgODsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBv
ZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMy
QXJyYXkgICAgICAgID0gMXUgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5
IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjRmxvYXQzMkFycmF5ICAgICAgID0gMXUgPDwgMTA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBV
aW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Zsb2F0NjRBcnJheSAgICAgICA9IDF1IDw8IDExOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGaW5hbE9iamVjdCAgICAgICAgPSAxdWxsIDw8IDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTRmluYWxPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0FycmF5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMTsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgSlNBcnJheS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24g
ICAgICAgICAgID0gMXVsbCA8PCAyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0Z1bmN0aW9uLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ4QXJyYXkgICAgICAgICAgPSAxdWxs
IDw8IDM7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ4QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJj
bGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQxNkFycmF5ICAgICAg
ICAgPSAxdWxsIDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBv
ZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJB
cnJheSAgICAgICAgID0gMXVsbCA8PCA1OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzJBcnJh
eSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1VpbnQ4QXJyYXkgICAgICAgICA9IDF1bGwgPDwgNjsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IFVpbnQ4QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNVaW50OENsYW1wZWRBcnJheSAgPSAxdWxsIDw8IDc7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1bGwg
PDwgODsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3Vi
Y2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXJyYXkgICAg
ICAgID0gMXVsbCA8PCA5OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDMyQXJyYXkgb3Igb25l
IG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9h
dDMyQXJyYXkgICAgICAgPSAxdWxsIDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2
QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdWxsIDw8IDExOyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50OEFycmF5IHwg
U3BlY0ludDE2QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5IHwgU3BlY1Vp
bnQ4Q2xhbXBlZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFycmF5IHwgU3Bl
Y0Zsb2F0MzJBcnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0RpcmVjdEFyZ3VtZW50cyAgICA9IDF1IDw8IDEyOyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNTY29wZWRBcmd1bWVudHMgICAgPSAxdSA8PCAxMzsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
U2NvcGVkQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
U3RyaW5nT2JqZWN0ICAgICAgID0gMXUgPDwgMTQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmlu
Z09iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjUmVnRXhwT2JqZWN0ICAg
ICAgID0gMXUgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5v
dCBhbnkgc3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMXUgPDwgMTY7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9u
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBT
cGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJh
eVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNT
dHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3BlY09iamVjdE90aGVyOyAvLyBCaXRt
YXNrIHVzZWQgZm9yIHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgot
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAxdSA8
PCAxNzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIGFuIGlkZW50aWZp
ZXIuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ1ZhciAgICAgICAgICA9
IDF1IDw8IDE4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFu
IGlkZW50aWZpZXIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RpcmVjdEFyZ3Vt
ZW50cyAgICA9IDF1bGwgPDwgMTI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVjdEFyZ3VtZW50
cyBvYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3BlZEFyZ3VtZW50
cyAgICA9IDF1bGwgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBv
YmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAg
ICA9IDF1bGwgPDwgMTQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVjdC4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjUmVnRXhwT2JqZWN0ICAgICAgID0gMXVsbCA8PCAx
NTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgUmVnRXhwT2JqZWN0IChhbmQgbm90IGFueSBzdWJjbGFz
cyBvZiBSZWdFeHBPYmplY3QpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNYXBP
YmplY3QgICAgICAgICAgPSAxdWxsIDw8IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgTWFwIG9iamVj
dCAoY2FuIGl0IGJlIGEgc3ViY2xhc3M/IEZJWE1FKS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjU2V0T2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNzsgLy8gSXQncyBkZWZpbml0
ZWx5IHMgU2V0IG9iamVjdCAoY2FuIGl0IGJlIGEgc3ViY2xhc3M/IEZJWE1FKS4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMXVsbCA8PCAxODsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJy
YXksIG9yIEpTRnVuY3Rpb24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVj
dCAgICAgICAgICAgICA9IFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNGdW5jdGlv
biB8IFNwZWNUeXBlZEFycmF5VmlldyB8IFNwZWNEaXJlY3RBcmd1bWVudHMgfCBTcGVjU2NvcGVk
QXJndW1lbnRzIHwgU3BlY1N0cmluZ09iamVjdCB8IFNwZWNSZWdFeHBPYmplY3QgfCBTcGVjTWFw
T2JqZWN0IHwgU3BlY1NldE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2Vk
IGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlvbi4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0gMXVsbCA8PCAxOTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIGFuIGlkZW50aWZpZXIuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ1ZhciAgICAgICAgICA9IDF1bGwg
PDwgMjA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBub3QgYW4gaWRl
bnRpZmllci4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nICAgICAgICAg
ICAgID0gU3BlY1N0cmluZ0lkZW50IHwgU3BlY1N0cmluZ1ZhcjsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgSlNTdHJpbmcuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAg
ICAgICAgICA9IDF1IDw8IDE5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTeW1ib2wuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGxPdGhlciAgICAgICAgICA9IDF1IDw8IDIwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBKU0NlbGwgYnV0IG5vdCBhIHN1YmNsYXNzIG9mIEpTT2JqZWN0
IGFuZCBkZWZpbml0ZWx5IG5vdCBhIEpTU3RyaW5nIG9yIGEgU3ltYm9sLiBGSVhNRTogVGhpcyBz
aG91bGRuJ3QgYmUgcGFydCBvZiBoZWFwLXRvcCBvciBieXRlY29kZS10b3AuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNzgKK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjU3ltYm9sICAgICAgICAgICAgID0gMXVsbCA8PCAyMTsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgU3ltYm9sLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3Ro
ZXIgICAgICAgICAgPSAxdWxsIDw8IDIyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0NlbGwgYnV0
IG5vdCBhIHN1YmNsYXNzIG9mIEpTT2JqZWN0IGFuZCBkZWZpbml0ZWx5IG5vdCBhIEpTU3RyaW5n
IG9yIGEgU3ltYm9sLiBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgcGFydCBvZiBoZWFwLXRvcCBv
ciBieXRlY29kZS10b3AuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzMwNzgKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbCAgICAgICAgICAgICAg
ID0gU3BlY09iamVjdCB8IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0NlbGxPdGhlcjsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdSA8PCAyMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IEludDMyIHdpdGggdmFsdWUgMCBvciAxLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNOb25Cb29sSW50MzIgICAgICAgPSAxdSA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDMyIHdpdGggdmFsdWUgb3RoZXIgdGhhbiAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0Jvb2xJbnQzMiAgICAgICAgICA9IDF1bGwgPDwgMjM7IC8vIEl0J3MgZGVmaW5p
dGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXVsbCA8PCAyNDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIEludDMyIHdpdGggdmFsdWUgb3RoZXIgdGhhbiAwIG9yIDEuCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0ludDMyT25seSAgICAgICAgICA9IFNwZWNCb29sSW50MzIgfCBT
cGVjTm9uQm9vbEludDMyOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIuCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDUyT25seSAgICAgICAgICA9IDF1IDw8IDIzOyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4gSXQn
cyBhbHNvIGRlZmluaXRlbHkgbm90IGFuIEludDMyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdWxsIDw8IDI1OyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gSW50NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4gSXQncyBhbHNvIGRlZmlu
aXRlbHkgbm90IGFuIEludDMyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJ
bnQgICAgICAgICAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0ludDUyT25seTsgLy8gSXQncyBz
b21ldGhpbmcgdGhhdCB3ZSBjYW4gZG8gbWFjaGluZSBpbnQgYXJpdGhtZXRpYyBvbi4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQW55SW50QXNEb3VibGUgICAgID0gMXUgPDwgMjQ7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ1MiBhbmQgaXQncyBpbnNpZGUgYSBkb3VibGUuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkludEFzRG91YmxlICAgICA9IDF1IDw8
IDI1OyAvLyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1i
ZXIgYW5kIGl0J3MgYSBkb3VibGUuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Fu
eUludEFzRG91YmxlICAgICA9IDF1bGwgPDwgMjY7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ1
MiBhbmQgaXQncyBpbnNpZGUgYSBkb3VibGUuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY05vbkludEFzRG91YmxlICAgICA9IDF1bGwgPDwgMjc7IC8vIEl0J3MgZGVmaW5pdGVseSBu
b3QgYW4gSW50NTIgYnV0IGl0J3MgYSByZWFsIG51bWJlciBhbmQgaXQncyBhIGRvdWJsZS4KIHN0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlUmVhbCAgICAgICAgID0gU3BlY05v
bkludEFzRG91YmxlIHwgU3BlY0FueUludEFzRG91YmxlOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBu
b24tTmFOIGRvdWJsZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlUHVy
ZU5hTiAgICAgID0gMXUgPDwgMjY7IC8vIEl0J3MgZGVmaW5pdGVseSBhIE5hTiB0aGF0IGlzIHNh
ZSB0byB0YWcgKGkuZS4gcHVyZSkuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Rv
dWJsZUltcHVyZU5hTiAgICA9IDF1IDw8IDI3OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhh
dCBpcyB1bnNhZmUgdG8gdGFnIChpLmUuIGltcHVyZSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1bGwgPDwgMjg7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIE5hTiB0aGF0IGlzIHNhZSB0byB0YWcgKGkuZS4gcHVyZSkuCitzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZUltcHVyZU5hTiAgICA9IDF1bGwgPDwgMjk7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIE5hTiB0aGF0IGlzIHVuc2FmZSB0byB0YWcgKGkuZS4gaW1wdXJlKS4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlTmFOICAgICAgICAgID0gU3Bl
Y0RvdWJsZVB1cmVOYU4gfCBTcGVjRG91YmxlSW1wdXJlTmFOOyAvLyBJdCdzIGRlZmluaXRlbHkg
c29tZSBraW5kIG9mIE5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNv
ZGVEb3VibGUgICAgID0gU3BlY0RvdWJsZVJlYWwgfCBTcGVjRG91YmxlUHVyZU5hTjsgLy8gSXQn
cyBlaXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZSwgYnV0IGl0J3MgZGVmaW5pdGVseSBu
b3QgaW1wdXJlIE5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbERvdWJs
ZSAgICAgICAgID0gU3BlY0RvdWJsZVJlYWwgfCBTcGVjRG91YmxlTmFOOyAvLyBJdCdzIGVpdGhl
ciBhIG5vbi1OYU4gb3IgYSBOYU4gZG91YmxlLgpAQCAtODEsMTIgKzgzLDEyIEBAIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGUKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRnVsbFJlYWxOdW1iZXIgICAgID0gU3BlY0FueUludCB8IFNwZWNEb3VibGVSZWFs
OyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZVJlYWwsIG9yIGEgSW50NTIuCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlTnVtYmVyICAgICA9IFNwZWNJ
bnQzMk9ubHkgfCBTcGVjQnl0ZWNvZGVEb3VibGU7IC8vIEl0J3MgZWl0aGVyIGFuIEludDMyIG9y
IGEgRG91YmxlLCBhbmQgdGhlIERvdWJsZSBjYW5ub3QgYmUgYW4gaW1wdXJlIE5hTi4KIHN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbE51bWJlciAgICAgICAgID0gU3BlY0FueUlu
dCB8IFNwZWNGdWxsRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiwgSW50NTIsIG9yIGEg
RG91YmxlLCBhbmQgdGhlIERvdWJsZSBjYW4gYmUgaW1wdXJlIE5hTi4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXUgPDwgMjg7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEJvb2xlYW4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY090
aGVyICAgICAgICAgICAgICA9IDF1IDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51
bGwgb3IgVW5kZWZpbmVkLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sZWFu
ICAgICAgICAgICAgPSAxdWxsIDw8IDMwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdWxs
IDw8IDMxOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVkLgogc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNaXNjICAgICAgICAgICAgICAgPSBTcGVjQm9v
bGVhbiB8IFNwZWNPdGhlcjsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBhIGJvb2xlYW4sIE51
bGwsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcFRv
cCAgICAgICAgICAgID0gU3BlY0NlbGwgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjTWlzYzsg
Ly8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3BlY0ludDUyT25seSBh
bmQgU3BlY0RvdWJsZUltcHVyZU5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
UHJpbWl0aXZlICAgICAgICAgID0gU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjTWlzYzsgLy8gSXQncyBhbnkgbm9uLU9iamVjdCBKU1ZhbHVlLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAgPSAxdSA8PCAz
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KK3N0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXVsbCA8PCAzMjsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVUb3AgICAgICAgID0gU3BlY0hlYXBUb3AgfCBTcGVjRW1w
dHk7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9u
bHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uIENvcnJlc3BvbmRzIHRvIHdoYXQgY291bGQgYmUg
Zm91bmQgaW4gYSBieXRlY29kZSBsb2NhbC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjRnVsbFRvcCAgICAgICAgICAgID0gU3BlY0J5dGVjb2RlVG9wIHwgU3BlY0Z1bGxOdW1iZXI7
IC8vIEl0IGNhbiBiZSBhbnl0aGluZyB0aGF0IGJ5dGVjb2RlIGNvdWxkIHNlZSBwbHVzIGV4b3Rp
YyBlbmNvZGluZ3Mgb2YgbnVtYmVycy4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNp
b24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNiArOTc3LDIyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCisgICAgY2FzZSBNYXBIYXNoOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVj
a2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElz
Tm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNK
U0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0yODgzLDcgKzI4OTksNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
CisKICAgICBzdGFydEV4ZWN1dGluZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICBy
ZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAy
MDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUzOCw3ICsyNTM4LDM3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0T3BlcmFuZCksIGdldChvcGVyYW5kKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICAgICAgCisKKyAgICBjYXNlIEpTTWFwR2V0SW50cmluc2ljOiB7CisgICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICBOb2RlKiBtYXAgPSBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAg
Tm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSk7CisgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIGtleSk7Cisg
ICAgICAgIE5vZGUqIGJ1Y2tldCA9IGFkZFRvR3JhcGgoR2V0TWFwQnVja2V0LCBFZGdlKG1hcCwg
TWFwT2JqZWN0VXNlKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAgICAgTm9kZSogcmVz
dWx0ID0gYWRkVG9HcmFwaChMb2FkRnJvbUpTTWFwQnVja2V0LCBPcEluZm8oKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBidWNrZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNl
IEpTU2V0SGFzSW50cmluc2ljOgorICAgIGNhc2UgSlNNYXBIYXNJbnRyaW5zaWM6IHsKKyAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgIE5vZGUqIG1hcE9y
U2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7
CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCBy
ZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNo
LCBrZXkpOworICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSBpbnRyaW5zaWMgPT0gSlNTZXRIYXNJ
bnRyaW5zaWMgPyBTZXRPYmplY3RVc2UgOiBNYXBPYmplY3RVc2U7CisgICAgICAgIE5vZGUqIGJ1
Y2tldCA9IGFkZFRvR3JhcGgoR2V0TWFwQnVja2V0LCBPcEluZm8oMCksIEVkZ2UobWFwT3JTZXQs
IHVzZUtpbmQpLCBFZGdlKGtleSksIEVkZ2UoaGFzaCkpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBhZGRUb0dyYXBoKElzTm9uRW1wdHlNYXBCdWNrZXQsIGJ1Y2tldCk7CisgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNDMsNiArMTI0MywyNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBMb2dTaGFkb3dDaGlja2VuVGFpbDoKICAg
ICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNYXBI
YXNoOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAg
IEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSYga2V5RWRnZSA9
IG5vZGUtPmNoaWxkMigpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE1hcEJ1Y2tldExvYywg
TWlzY0ZpZWxkcywgbWFwRWRnZSwga2V5RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgRWRnZSYgYnVja2V0RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwR2V0TG9jLCBNaXNjRmllbGRzLCBi
dWNrZXRFZGdlKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihNYXBIYXNMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxk
MSgpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA1
NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsNiArMTg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIENoZWNrV2F0Y2hkb2dU
aW1lcjoKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICBjYXNlIE1hcEhhc2g6Cisg
ICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5
LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAg
ICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJl
dHVybiA3OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJu
IDg7IH0KICAgICAKICAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVz
ZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0
YXR1cykKICAgICB7CkBAIC0xOTcsOCArMTk3LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIHVpbnRw
dHJfdCBzaGlmdGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSA8PCBzaGlm
dCgpOwogICAgICAgICBBU1NFUlQoKHNoaWZ0ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9PSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihub2RlKSk7CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYg
dXNlS2luZCA8IExhc3RVc2VLaW5kKTsKLSAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAyKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8
PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8
dWludHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8
IDEpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihERkc6OmlzUHJvdmVkKHByb29mU3RhdHVzKSk7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtp
bmQpIDw8IDIpIDwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgc2hpZnQoKSksICJXZSBy
ZWx5IG9uIHRoaXMgYmVpbmcgdHJ1ZSB0byBub3QgY2xvYmJlciB0aGUgbm9kZSBwb2ludGVyLiIp
OworICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0gc2hpZnRlZFZhbHVlIHwgKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChraWxsU3RhdHVzKSA8
PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjppc1Byb3ZlZChwcm9vZlN0YXR1cykp
OworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgdW5pb24gVSB7
CisgICAgICAgICAgICAgICAgVSgpIHsgd29yZCA9IDA7IH0KKyAgICAgICAgICAgICAgICB1aW50
cHRyX3Qgd29yZDsKKyAgICAgICAgICAgICAgICBFZGdlIGVkZ2U7CisgICAgICAgICAgICB9IHU7
CisgICAgICAgICAgICB1LndvcmQgPSByZXN1bHQ7CisgICAgICAgICAgICBBU1NFUlQodS5lZGdl
LnVzZUtpbmRVbmNoZWNrZWQoKSA9PSB1c2VLaW5kKTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVk
Z2Uubm9kZSgpID09IG5vZGUpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5wcm9vZlN0YXR1
c1VuY2hlY2tlZCgpID09IHByb29mU3RhdHVzKTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVkZ2Uu
a2lsbFN0YXR1c1VuY2hlY2tlZCgpID09IGtpbGxTdGF0dXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU0NSw2ICsxNTQ1LDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCisgICAgICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICAgICAgZml4
RWRnZTxNYXBPYmplY3RVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICAg
ICAgZml4RWRnZTxTZXRPYmplY3RVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgZml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgTWFwSGFzaDoKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgYnJlYWs7CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
IC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9y
Z2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDE1IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBjYXNlIFJlZ0V4cE9i
amVjdExhc3RJbmRleExvYzoKICAgICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3RMYXN0SW5k
ZXhMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwQnVja2V0TG9jOgorICAgICAg
ICBvdXQucHJpbnQoIk1hcEJ1Y2tldExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBK
U01hcEdldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcEdldExvYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYXBIYXNMb2M6CisgICAgICAgIG91dC5wcmludCgiTWFwSGFzTG9j
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsMTAgQEAgZW51bSBM
b2NhdGlvbktpbmQgewogICAgIFN0cnVjdHVyZUxvYywKICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNl
dExvYywKICAgICBTdGFja0xvYywKLSAgICBTdGFja1BheWxvYWRMb2MKKyAgICBTdGFja1BheWxv
YWRMb2MsCisgICAgTWFwQnVja2V0TG9jLAorICAgIEpTTWFwR2V0TG9jLAorICAgIE1hcEhhc0xv
YwogfTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyMSw2ICsxNDIxLDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgICAgIGNhc2UgU3RyaW5nUmVwbGFjZVJl
Z0V4cDoKICAgICAgICAgY2FzZSBUb051bWJlcjoKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFw
QnVja2V0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRv
ciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpCisg
ICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAgLyogTm9kZXMgZm9y
IEpTTWFwIGFuZCBKU1NldCAqLyBcCisgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMy
KSBcCisgICAgbWFjcm8oR2V0TWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhM
b2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhJc05vbkVtcHR5
TWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVz
IGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFu
ZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBh
Y2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw4IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52
aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5j
bHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVk
ZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0xODExLDYgKzE4MTMsMzQgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYQogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5w
dXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLCBzbG90KTsKIH0K
IAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIHJldHVybiBq
c01hcEhhc2goZXhlYywgdm0sIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVlOjpkZWNvZGUoaW5wdXQp
KSk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90
IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQg
PSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpTVmFsdWU6OmRlY29kZShr
ZXkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuICpidWNrZXQ7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25K
U1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFs
dWUga2V5LCBpbnQzMl90IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBO
YXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tl
dFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIEpT
VmFsdWU6OmRlY29kZShrZXkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisKIGV4dGVybiAiQyIgdm9pZCBK
SVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sqIGNvZGVCbG9j
aywgT1NSRXhpdEJhc2UqIGV4aXQpCiB7CiAgICAgLy8gSXQncyBzb3J0IG9mIHByZWZlcmFibGUg
dGhhdCB3ZSBkb24ndCBHQyB3aGlsZSBpbiBoZXJlLiBBbnl3YXlzLCBkb2luZyBzbyB3b3VsZG4n
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNiArMTQyLDEwIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uRW5zdXJlQXJyYXkKIFN0cmluZ0ltcGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiwgSlNTdHJpbmcqKTsKIEpTU3RyaW5nKiBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblNpbmdsZUNoYXJhY3RlclN0cmluZyhFeGVjU3RhdGUqLCBpbnQzMl90KTsK
IAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiwgRW5j
b2RlZEpTVmFsdWUgaW5wdXQpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkpTTWFw
RmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7
CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0KEV4ZWNTdGF0
ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKKwogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld1N0cmluZ09iamVjdChFeGVjU3RhdGUqLCBKU1N0cmluZyosIFN0
cnVjdHVyZSopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRvU3RyaW5nT25DZWxs
KEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRv
U3RyaW5nKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA4LDYg
KzcwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxl
OgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgR2V0RnJvbUFyZ3Vt
ZW50czoKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgogICAgICAgICBjYXNlIFRv
TnVtYmVyOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKG1fY3VycmVudE5vZGUtPmdldEhl
YXBQcmVkaWN0aW9uKCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03MzgsNiArNzM5LDE2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2Ug
TWFwSGFzaDoKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBz
ZXRQcmVkaWN0aW9uKFNwZWNDZWxsT3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3Bl
Y0Jvb2xlYW4pOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgY2FzZSBHZXRSZXN0TGVu
Z3RoOiB7CiAgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOwogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVi
bGljOgogICAgICAgICBjYXNlIEZ1bmN0aW9uVXNlOgogICAgICAgICBjYXNlIEZpbmFsT2JqZWN0
VXNlOgogICAgICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKKyAgICAgICAgY2FzZSBNYXBPYmpl
Y3RVc2U6CisgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICBjYXNlIE9iamVjdE9y
T3RoZXJVc2U6CiAgICAgICAgIGNhc2UgU3RyaW5nSWRlbnRVc2U6CiAgICAgICAgIGNhc2UgU3Ry
aW5nVXNlOgpAQCAtMzU1LDYgKzM1NywxMCBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RT
dGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBHZXREeW5hbWljVmFyOgogICAgIGNhc2UgUHV0RHluYW1p
Y1ZhcjoKICAgICBjYXNlIFJlc29sdmVTY29wZToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAgY2Fz
ZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2Ug
SXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBjYXNlIEJv
dHRvbVZhbHVlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiREZHU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKKyNp
bmNsdWRlICJIYXNoTWFwSW1wbC5oIgogI2luY2x1ZGUgIkpTRW52aXJvbm1lbnRSZWNvcmQuaCIK
ICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIgpAQCAtNDcxOSw2ICs0NzIwLDgyIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2Fz
ZSBNYXBIYXNoOiB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKworICAgICAgICBKU1ZhbHVlUmVncyBpbnB1dFJlZ3MgPSBpbnB1dC5qc1ZhbHVl
UmVncygpOworCisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3Vs
dEdQUiwgaW5wdXRSZWdzKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAg
ICAgaW50MzJSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
bWFwKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRo
aXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2go
dGhpcywgbm9kZS0+Y2hpbGQzKCkpOworICAgICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1
bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAg
SlNWYWx1ZVJlZ3Mga2V5UmVncyA9IGtleS5qc1ZhbHVlUmVncygpOworICAgICAgICBHUFJSZWcg
aGFzaEdQUiA9IGhhc2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmpl
Y3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3Qobm9kZS0+Y2hpbGQxKCksIG1h
cEdQUik7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRP
YmplY3RVc2UpCisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qobm9kZS0+Y2hpbGQxKCks
IG1hcEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleVJl
Z3MsIGhhc2hHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleVJlZ3MsIGhhc2hH
UFIpOworICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgICAgICBjZWxsUmVzdWx0
KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBidWNrZXQo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0UGF5bG9h
ZCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKKworICAgICAg
ICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRU
YWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CisKKyAgICAgICAgYXV0byBub3RCdWNrZXQgPSBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBidWNrZXRHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkVmFsdWUoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZlZhbHVlKCkpLCBK
U1ZhbHVlUmVncyhyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpKTsKKyAgICAgICAgYXV0
byBkb25lID0gbV9qaXQuanVtcCgpOworCisgICAgICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7
CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyks
IHJlc3VsdFRhZ0dQUik7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1
bHRQYXlsb2FkR1BSKTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSLCBub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OiB7CisgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQ
UiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIo
KTsKKworICAgICAgICBtX2ppdC5jb21wYXJlUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
YnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQUik7CisgICAgICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2Fz
ZSBGbHVzaDoKICAgICAgICAgYnJlYWs7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksOSBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1l
bnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVy
YXRvci5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgi
CiAjaW5jbHVkZSAiU2V0dXBWYXJhcmdzRnJhbWUuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVy
c01vZGUuaCIKQEAgLTQ2MTUsNiArNDYxNywxNjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIE1hcEhh
c2g6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBpbnB1dC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlz
dCBzdHJhaWdodEhhc2g7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBkb25lOwor
ICAgICAgICBhdXRvIGlzTm90Q2VsbCA9IG1faml0LmJyYW5jaElmTm90Q2VsbChpbnB1dEdQUik7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc3Ry
YWlnaHRIYXNoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoaW5wdXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zm
c2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhpbnB1dEdQUiwgSlNTdHJpbmc6Om9mZnNldE9mVmFs
dWUoKSksIHJlc3VsdEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgU3RyaW5nSW1wbDo6Zmxh
Z3NPZmZzZXQoKSksIHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LnVyc2hpZnQ2NChNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OnNfZmxhZ0NvdW50KSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CisKKyAgICAgICAgaXNOb3RDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgc3RyYWlnaHRI
YXNoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdE51bWJlcihpbnB1dEdQUikpOworICAgICAgICBz
dHJhaWdodEhhc2guYXBwZW5kKG1faml0LmJyYW5jaElmSW50MzIoSlNWYWx1ZVJlZ3MoaW5wdXRH
UFIpKSk7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAg
IHN0cmFpZ2h0SGFzaC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm1vdmUoaW5wdXRHUFIs
IHJlc3VsdEdQUik7CisgICAgICAgIG1faml0LndhbmdzSW50NjRIYXNoKHJlc3VsdEdQUiwgdGVt
cEdQUik7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgc2xv
d1BhdGgubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1
bHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gsIHJlc3VsdEdQ
UiwgaW5wdXRHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBrZXkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9w
ZXJhbmQgaGFzaCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBt
YXNrKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgaW5kZXgodGhpcyk7CisgICAgICAgIEdQ
UlRlbXBvcmFyeSBidWZmZXIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBidWNrZXQodGhp
cyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAgR1BSUmVn
IGhhc2hHUFIgPSBoYXNoLmdwcigpOworICAgICAgICBHUFJSZWcgbWFwR1BSID0gbWFwLmdwcigp
OworICAgICAgICBHUFJSZWcgbWFza0dQUiA9IG1hc2suZ3ByKCk7CisgICAgICAgIEdQUlJlZyBp
bmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgYnVmZmVyR1BSID0gYnVmZmVy
LmdwcigpOworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOworICAgICAg
ICBHUFJSZWcga2V5R1BSID0ga2V5LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
TWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KG5vZGUtPmNoaWxk
MSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gU2V0T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KG5vZGUtPmNo
aWxkMSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobWFwR1BSLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
ID8gSlNNYXA6Om9mZnNldE9mSGFzaE1hcEltcGwoKSA6IEpTU2V0OjpvZmZzZXRPZkhhc2hNYXBJ
bXBsKCkpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5Pj46Om9mZnNldE9mQ2FwYWNpdHkoKSksIG1hc2tHUFIpOworICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkJ1ZmZlcigpKSwg
YnVmZmVyR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBtYXNrR1BS
KTsKKyAgICAgICAgbV9qaXQubW92ZShoYXNoR1BSLCBpbmRleEdQUik7CisKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0
IHNsb3dQYXRoQ2FzZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBsb29wQXJv
dW5kOworCisgICAgICAgIG1faml0LmFuZDMyKG1hc2tHUFIsIGluZGV4R1BSKTsKKyAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJ1ZmZlckdQUiwgaW5kZXhH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgYnVja2V0R1BSKTsKKyAgICAgICAgbV9q
aXQubW92ZShidWNrZXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gbm90UHJlc2VudElu
VGFibGUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5Pj46OmVtcHR5VmFsdWUoKSkpOworICAgICAgICBsb29wQXJvdW5k
LmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAgICAgICAg
ICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5Pj46OmRlbGV0ZWRWYWx1ZSgpKSkpOworCisgICAgICAgIG1faml0
LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpvZmZzZXRPZktleSgpKSwgYnVja2V0R1BSKTsKKworICAg
ICAgICAvLyBQZXJmb3JtIE9iamVjdC5pcygpCisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIpKTsgLy8gVGhl
eSdyZSBkZWZpbml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVja2V0IHdlIHdl
cmUgbG9va2luZyBmb3IhCisgICAgICAgIGF1dG8gb25lSXNudENlbGwgPSBtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoSlNWYWx1ZVJlZ3MoYnVja2V0R1BSKSk7CisgICAgICAgIC8vIGZpcnN0IGlzIGEg
Y2VsbCBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoSlNWYWx1ZVJlZ3Moa2V5R1BSKSkpOworICAgICAgICAvLyBCb3RoIGFyZSBjZWxscyBoZXJl
LgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSlND
ZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOwor
ICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KKyAgICAgICAgc2xvd1BhdGhD
YXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6RXF1YWwsCisgICAgICAgICAg
ICBKSVRDb21waWxlcjo6QWRkcmVzcyhrZXlHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhlIGZpcnN0IGlz
IGEgc3RyaW5nLCBidXQgdGhlIHNlY29uZCBpcyBub3QsIHdlIGNvbnRpbnVlIHRvIGxvb3AgYXJv
dW5kLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAg
IG9uZUlzbnRDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFkeSBkb25l
IGEgNjQtYml0IGNvbXBhcmUgYXQgdGhpcyBwb2ludCwgc28gaWYgb25lIGlzIG5vdCBhIG51bWJl
ciwgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBlcXVhbC4KKyAgICAgICAgbG9vcEFyb3VuZC5hcHBl
bmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoYnVja2V0R1BSKSk7CisgICAgICAgIGxvb3BBcm91
bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGtleUdQUikpOworICAgICAgICAvLyBC
b3RoIGFyZSBkZWZpbml0ZWx5IG51bWJlcnMuIElmIHdlIHNlZSBhIGRvdWJsZSwgd2UgZ28gdG8g
dGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3RJbnQzMihidWNrZXRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9q
aXQuYnJhbmNoSWZOb3RJbnQzMihrZXlHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGxvb3BBcm91
bmQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIGlu
ZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmbV9qaXQpOworCisg
ICAgICAgIHNsb3dQYXRoQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRTcGlsbEFs
bFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25K
U01hcEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlHUFIsIGhhc2hHUFIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTU2V0RmluZEJ1
Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQUik7CisgICAgICAgIHNpbGVu
dEZpbGxBbGxSZWdpc3RlcnMoaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVj
aygpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIG5vdFBy
ZXNlbnRJblRhYmxlLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
UHRyKG51bGxwdHIpLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0Lmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IGF1dG8gbm90QnVja2V0ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgYnVja2V0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJ1Y2tldEdQUiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6
b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0gbV9qaXQu
anVtcCgpOworCisgICAgICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0Lmdw
cigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAg
IG1faml0LmNvbXBhcmVQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRHUFIsIFRy
dXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CiAgICAgY2FzZSBJc09iamVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgUmV1
c2UsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQwOCw2ICs3
NDA4LDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVJlZ0V4cE9iamUKICAgICBz
cGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7CiB9CiAKK3ZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIEdQUlJlZyBjZWxsKQor
eworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNwZWNNYXBPYmplY3QsIEpTTWFw
VHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVjdChFZGdl
IGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjTWFwT2JqZWN0KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFuZCh0aGlz
LCBlZGdlKTsKKyAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7Cit9
CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UsIEdQ
UlJlZyBjZWxsKQoreworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNwZWNTZXRP
YmplY3QsIEpTU2V0VHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVNl
dE9iamVjdChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVj
U2V0T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
b3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwgb3BlcmFu
ZC5ncHIoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVjdE9yT3Ro
ZXIoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY09iamVj
dCB8IFNwZWNPdGhlcikpCkBAIC03Njk1LDYgKzc3MjMsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAg
ICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TWFwT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVTZXRPYmpl
Y3QoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAg
ICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKICAgICAgICAgYnJlYWs7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZp
c2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMTEsNiArMTMxMSwxMiBAQCBwdWJsaWM6CiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihD
X0pJVE9wZXJhdGlvbl9FQ0paIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEs
IEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljIG9wZXJhdGlv
biwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcy
LCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZShhcmcxLmdwcigpLCBhcmcyLmdwcigpLCBtYXRoSUMpOwpAQCAtMTY5
MSw2ICsxNjk3LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklU
T3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CisgICAg
ICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9
CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFpfSklUT3BlcmF0aW9uX0VK
Wlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgdW5zaWduZWQgYXJnMiwg
dW5zaWduZWQgYXJnMykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4
ZWNTdGF0ZShhcmcxLCBUcnVzdGVkSW1tMzIoYXJnMiksIFRydXN0ZWRJbW0zMihhcmczKSk7CkBA
IC0xNzM5LDYgKzE3NTEsMTggQEAgcHVibGljOgogICAgIH0KICNlbHNlIC8vIFVTRShKU1ZBTFVF
MzJfNjQpCiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKENfSklUT3BlcmF0
aW9uX0VDSlogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgSlNWYWx1ZVJl
Z3MgYXJnMiwgR1BSUmVnIGFyZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50
c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCksIGFy
ZzMpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3Vs
dCk7CisgICAgfQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9w
ZXJhdGlvbl9FSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEpCisg
ICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoRUFCSV8zMkJJ
VF9EVU1NWV9BUkcgYXJnMS5wYXlsb2FkR1BSKCksIGFyZzEudGFnR1BSKCkpOworICAgICAgICBy
ZXR1cm4gYXBwZW5kQ2FsbFNldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAg
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0pJVE9wZXJhdGlvbl9FSkpNaWMg
b3BlcmF0aW9uLCBKU1ZhbHVlUmVncyByZXN1bHQsIEpTVmFsdWVSZWdzIGFyZzEsIEpTVmFsdWVS
ZWdzIGFyZzIsIFRydXN0ZWRJbW1QdHIgbWF0aElDKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEucGF5bG9h
ZEdQUigpLCBhcmcxLnRhZ0dQUigpLCBhcmcyLnBheWxvYWRHUFIoKSwgYXJnMi50YWdHUFIoKSwg
bWF0aElDKTsKQEAgLTI2NzksNiArMjcwMywxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzcGVjdWxh
dGVGaW5hbE9iamVjdChFZGdlKTsKICAgICB2b2lkIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChFZGdl
LCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBzcGVjdWxhdGVSZWdFeHBPYmplY3QoRWRnZSk7Cisg
ICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSk7CisgICAgdm9pZCBzcGVjdWxhdGVNYXBP
YmplY3QoRWRnZSwgR1BSUmVnIGNlbGwpOworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVk
Z2UpOworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKICAg
ICB2b2lkIHNwZWN1bGF0ZU9iamVjdE9yT3RoZXIoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVT
dHJpbmcoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmdJ
ZGVudEFuZExvYWRTdG9yYWdlKEVkZ2UgZWRnZSwgR1BSUmVnIHN0cmluZywgR1BSUmVnIHN0b3Jh
Z2UpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCShyZXZp
c2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgVXNlCiAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CiAgICAgICAgIG91
dC5wcmludCgiUmVnRXhwT2JqZWN0Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hcE9i
amVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJNYXBPYmplY3RVc2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAgICBvdXQucHJpbnQoIlNldE9iamVj
dFVzZSIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAg
ICAgICBvdXQucHJpbnQoIk9iamVjdE9yT3RoZXIiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmgJKHJldmlzaW9uIDIwNTQ5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02Myw2ICs2Myw4IEBAIGVudW0gVXNlS2luZCB7CiAgICAgS25vd25TdHJpbmdVc2UsCiAgICAg
S25vd25QcmltaXRpdmVVc2UsIC8vIFRoaXMgYml6YXJyZSB0eXBlIGFyaXNlcyBmb3Igb3Bfc3Ry
Y2F0LCB3aGljaCBoYXMgYSBieXRlY29kZSBndWFyYW50ZWUgdGhhdCBpdCB3aWxsIG9ubHkgc2Vl
IHByaW1pdGl2ZXMgKGkuZS4gbm90IG9iamVjdHMpLgogICAgIFN5bWJvbFVzZSwKKyAgICBNYXBP
YmplY3RVc2UsCisgICAgU2V0T2JqZWN0VXNlLAogICAgIFN0cmluZ09iamVjdFVzZSwKICAgICBT
dHJpbmdPclN0cmluZ09iamVjdFVzZSwKICAgICBOb3RTdHJpbmdWYXJVc2UsCkBAIC0xMzQsNiAr
MTM2LDEwIEBAIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKFVzZUsKICAgICAg
ICAgcmV0dXJuIFNwZWNIZWFwVG9wICYgflNwZWNPYmplY3Q7CiAgICAgY2FzZSBTeW1ib2xVc2U6
CiAgICAgICAgIHJldHVybiBTcGVjU3ltYm9sOworICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAg
ICAgICByZXR1cm4gU3BlY01hcE9iamVjdDsKKyAgICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAg
ICAgcmV0dXJuIFNwZWNTZXRPYmplY3Q7CiAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAg
ICAgIHJldHVybiBTcGVjU3RyaW5nT2JqZWN0OwogICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmpl
Y3RVc2U6CkBAIC0yMjEsNiArMjI3LDggQEAgaW5saW5lIGJvb2wgaXNDZWxsKFVzZUtpbmQga2lu
ZCkKICAgICBjYXNlIFN5bWJvbFVzZToKICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToKICAgICBj
YXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgorICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAg
IGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0Ogog
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaAkocmV2aXNpb24gMjA1NDkyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDggQEAKICNpbmNsdWRlICJERkdBcnJheU1vZGUu
aCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXAuaCIKICNpbmNsdWRlICJJbmRleGluZ1R5cGUu
aCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtMTAxLDcgKzEwMywxMyBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oU3RydWN0dXJlX2NsYXNzSW5mbywgU3RydWN0
dXJlOjpjbGFzc0luZm9PZmZzZXQoKSkgXAogICAgIG1hY3JvKFN0cnVjdHVyZV9nbG9iYWxPYmpl
Y3QsIFN0cnVjdHVyZTo6Z2xvYmFsT2JqZWN0T2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1
cmVfcHJvdG90eXBlLCBTdHJ1Y3R1cmU6OnByb3RvdHlwZU9mZnNldCgpKSBcCi0gICAgbWFjcm8o
U3RydWN0dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zmc2V0KCkpCisg
ICAgbWFjcm8oU3RydWN0dXJlX3N0cnVjdHVyZUlELCBTdHJ1Y3R1cmU6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpIFwKKyAgICBtYWNybyhKU01hcF9oYXNoTWFwSW1wbCwgSlNNYXA6Om9mZnNldE9mSGFz
aE1hcEltcGwoKSkgXAorICAgIG1hY3JvKEpTU2V0X2hhc2hNYXBJbXBsLCBKU1NldDo6b2Zmc2V0
T2ZIYXNoTWFwSW1wbCgpKSBcCisgICAgbWFjcm8oSGFzaE1hcEltcGxfY2FwYWNpdHksIEhhc2hN
YXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZDYXBh
Y2l0eSgpKSBcCisgICAgbWFjcm8oSGFzaE1hcEltcGxfYnVmZmVyLCAgSGFzaE1hcEltcGw8SGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkJ1ZmZlcigpKSBcCisg
ICAgbWFjcm8oSGFzaE1hcEJ1Y2tldF92YWx1ZSwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZWYWx1ZSgpKSBcCisgICAgbWFjcm8oSGFzaE1hcEJ1Y2tl
dF9rZXksIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9m
S2V5KCkpIFwKIAogI2RlZmluZSBGT1JfRUFDSF9JTkRFWEVEX0FCU1RSQUNUX0hFQVAobWFjcm8p
IFwKICAgICBtYWNybyhEaXJlY3RBcmd1bWVudHNfc3RvcmFnZSwgRGlyZWN0QXJndW1lbnRzOjpz
dG9yYWdlT2Zmc2V0KCksIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDIwNTQ5
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDYgKzE4MSwxMCBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNh
bkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICBjYXNlIEluOgogICAg
IGNhc2UgSXNKU0FycmF5OgorICAgIGNhc2UgTWFwSGFzaDoKKyAgICBjYXNlIEdldE1hcEJ1Y2tl
dDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05vbkVtcHR5TWFw
QnVja2V0OgogICAgIGNhc2UgSXNFbXB0eToKICAgICBjYXNlIElzVW5kZWZpbmVkOgogICAgIGNh
c2UgSXNCb29sZWFuOgpAQCAtNDI1LDYgKzQyOSw4IEBAIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09iamVjdFVzZToK
ICAgICAgICAgICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgU3ltYm9sVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgTWFwT2JqZWN0VXNl
OgorICAgICAgICAgICAgICAgIGNhc2UgU2V0T2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNh
c2UgRmluYWxPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6
CiAgICAgICAgICAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03MCw2ICs3MCw3IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTR2VuZXJhdG9yRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5o
IgorI2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUu
aCIKQEAgLTg5OCw2ICs4OTksMTggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJc0pTQXJyYXk6
CiAgICAgICAgICAgICBjb21waWxlSXNKU0FycmF5KCk7CiAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBNYXBIYXNoOgorICAgICAgICAgICAgY29tcGlsZU1hcEhhc2goKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICAgICAgICAgIGNv
bXBpbGVHZXRNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExv
YWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tl
dCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tl
dDoKKyAgICAgICAgICAgIGNvbXBpbGVJc05vbkVtcHR5TWFwQnVja2V0KCk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJc09iamVjdDoKICAgICAgICAgICAgIGNvbXBpbGVJc09i
amVjdCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC02Mjc0LDYgKzYyODcsMjI5IEBAIHByaXZh
dGU6CiAgICAgICAgIHNldEJvb2xlYW4obV9vdXQucGhpKEludDMyLCBub3RDZWxsUmVzdWx0LCBj
ZWxsUmVzdWx0KSk7CiAgICAgfQogCisgICAgdm9pZCBjb21waWxlTWFwSGFzaCgpCisgICAgewor
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworCisg
ICAgICAgIExCYXNpY0Jsb2NrIGlzQ2VsbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAg
ICBMQmFzaWNCbG9jayBub3RDZWxsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBz
dHJhaWdodEhhc2ggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc051
bWJlckNhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBpc1N0cmlu
Z0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub25FbXB0eVN0
cmluZ0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAg
ICAgICAgIGlzQ2VsbCh2YWx1ZSwgcHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSksIHVuc3Vy
ZShpc0NlbGxDYXNlKSwgdW5zdXJlKG5vdENlbGwpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzQ2VsbENhc2UsIGlzU3RyaW5nQ2FzZSk7CisgICAg
ICAgIExWYWx1ZSBpc1N0cmluZyA9IG1fb3V0LmVxdWFsKG1fb3V0LmxvYWQ4WmVyb0V4dDMyKHZh
bHVlLCBtX2hlYXBzLkpTQ2VsbF90eXBlSW5mb1R5cGUpLCBtX291dC5jb25zdEludDMyKFN0cmlu
Z1R5cGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNTdHJpbmcsIHVu
c3VyZShpc1N0cmluZ0Nhc2UpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSk7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oaXNTdHJpbmdDYXNlLCBub25FbXB0eVN0cmluZ0Nhc2UpOworICAgICAgICBM
VmFsdWUgc3RyaW5nSW1wbCA9IG1fb3V0LmxvYWRQdHIodmFsdWUsIG1faGVhcHMuSlNTdHJpbmdf
dmFsdWUpOworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBtX291dC5lcXVhbChz
dHJpbmdJbXBsLCBtX291dC5jb25zdEludFB0cigwKSksIHJhcmVseShzbG93Q2FzZSksIHVzdWFs
bHkobm9uRW1wdHlTdHJpbmdDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm9uRW1w
dHlTdHJpbmdDYXNlLCBub3RDZWxsKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBtX291dC5sU2hy
KG1fb3V0LmxvYWQzMihzdHJpbmdJbXBsLCBtX2hlYXBzLlN0cmluZ0ltcGxfaGFzaEFuZEZsYWdz
KSwgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdJbXBsOjpzX2ZsYWdDb3VudCkpOworICAgICAgICBW
YWx1ZUZyb21CbG9jayBub25FbXB0eVN0cmluZ0hhc2hSZXN1bHQgPSBtX291dC5hbmNob3IoaGFz
aCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoLCBtX291dC5jb25zdElu
dDMyKDApKSwKKyAgICAgICAgICAgIHJhcmVseShzbG93Q2FzZSksIHVzdWFsbHkoY29udGludWF0
aW9uKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Q2VsbCwgaXNOdW1iZXJDYXNlKTsK
KyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgaXNOdW1iZXIodmFsdWUpLCB1bnN1
cmUoaXNOdW1iZXJDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGlzTnVtYmVyQ2FzZSwgc3RyYWlnaHRIYXNoKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKAorICAgICAgICAgICAgaXNJbnQzMih2YWx1ZSksIHVuc3VyZShzdHJhaWdodEhhc2gpLCB1
bnN1cmUoc2xvd0Nhc2UpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzdHJhaWdodEhhc2gs
IHNsb3dDYXNlKTsKKyAgICAgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAgTFZh
bHVlIGtleSA9IHZhbHVlOworICAgICAgICBMVmFsdWUgdGVtcCA9IGtleTsKKyAgICAgICAgdGVt
cCA9IG1fb3V0LnNobCh0ZW1wLCBtX291dC5jb25zdEludDMyKDMyKSk7CisgICAgICAgIHRlbXAg
PSBtX291dC5iaXROb3QodGVtcCk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXAp
OworICAgICAgICAvLyBrZXkgXj0gKGtleSA+PiAyMik7CisgICAgICAgIHRlbXAgPSBrZXk7Cisg
ICAgICAgIHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjIpKTsKKyAg
ICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+
KGtleSA8PCAxMyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5z
aGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigxMykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0
Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAg
Ly8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAg
PSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoOCkpOworICAgICAgICBrZXkgPSBt
X291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5ICs9IChrZXkgPDwgMyk7Cisg
ICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQu
Y29uc3RJbnQzMigzKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmFkZChrZXksIHRlbXApOworICAg
ICAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAg
IHRlbXAgPSBtX291dC5sU2hyKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTUpKTsKKyAgICAgICAg
a2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8
PCAyNyk7CisgICAgICAgIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVt
cCwgbV9vdXQuY29uc3RJbnQzMigyNykpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRl
bXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5
IF49IChrZXkgPj4gMzEpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9v
dXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDMxKSk7CisgICAgICAgIGtleSA9IG1fb3V0
LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5jYXN0VG9JbnQzMihrZXkp
OworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3Ioa2V5
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBz
bG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKAorICAgICAgICAgICAgdm1DYWxsKEludDMyLCBtX291
dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCksIG1fY2FsbEZyYW1lLCB2YWx1ZSkpOworICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEludDMyKG1fb3V0LnBoaShJbnQz
MiwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCwgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0KSk7Cisg
ICAgfQorCisgICAgdm9pZCBjb21waWxlR2V0TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExC
YXNpY0Jsb2NrIGxvb3BTdGFydCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Js
b2NrIGxvb3BBcm91bmQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBz
bG93UGF0aCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdFByZXNl
bnRJblRhYmxlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90RW1w
dHlWYWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdERlbGV0
ZWRWYWx1ZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEJpdEVx
dWFsID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5Tm90
Q2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlz
Q2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJvdGhBcmVDZWxs
cyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzU3Ry
aW5nID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYnVja2V0S2V5SXNO
dW1iZXIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJlTnVt
YmVycyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlz
SW50MzIgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0g
bV9vdXQuaW5zZXJ0TmV3QmxvY2tzQmVmb3JlKGxvb3BTdGFydCk7CisKKyAgICAgICAgTFZhbHVl
IG1hcDsKKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVj
dFVzZSkKKyAgICAgICAgICAgIG1hcCA9IGxvd01hcE9iamVjdChtX25vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgZWxzZSBpZiAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2JqZWN0
VXNlKQorICAgICAgICAgICAgbWFwID0gbG93U2V0T2JqZWN0KG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
CisgICAgICAgIExWYWx1ZSBrZXkgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOworICAg
ICAgICBMVmFsdWUgaGFzaCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQzKCkpOworCisgICAgICAg
IExWYWx1ZSBoYXNoTWFwSW1wbCA9IG1fb3V0LmxvYWRQdHIobWFwLCBtX25vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UgPyBtX2hlYXBzLkpTTWFwX2hhc2hNYXBJbXBsIDog
bV9oZWFwcy5KU1NldF9oYXNoTWFwSW1wbCk7CisgICAgICAgIExWYWx1ZSBidWZmZXIgPSBtX291
dC5sb2FkUHRyKGhhc2hNYXBJbXBsLCBtX2hlYXBzLkhhc2hNYXBJbXBsX2J1ZmZlcik7CisgICAg
ICAgIExWYWx1ZSBtYXNrID0gbV9vdXQuc3ViKG1fb3V0LmxvYWQzMihoYXNoTWFwSW1wbCwgbV9o
ZWFwcy5IYXNoTWFwSW1wbF9jYXBhY2l0eSksIG1fb3V0LmludDMyT25lKTsKKworICAgICAgICBW
YWx1ZUZyb21CbG9jayBpbmRleFN0YXJ0ID0gbV9vdXQuYW5jaG9yKGhhc2gpOworICAgICAgICBt
X291dC5qdW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcFN0YXJ0
LCBub3RFbXB0eVZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHVubWFza2VkSW5kZXggPSBtX291dC5w
aGkoSW50MzIsIGluZGV4U3RhcnQpOworICAgICAgICBMVmFsdWUgaW5kZXggPSBtX291dC5iaXRB
bmQobWFzaywgdW5tYXNrZWRJbmRleCk7CisgICAgICAgIExWYWx1ZSBoYXNoTWFwQnVja2V0ID0g
bV9vdXQubG9hZDY0KG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLnByb3BlcnRpZXMuYXRBbnlOdW1i
ZXIoKSwgYnVmZmVyLCBtX291dC56ZXJvRXh0KGluZGV4LCBJbnQ2NCksIFNjYWxlRWlnaHQpKTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhhc2hN
YXBCdWNrZXQpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoaGFzaE1hcEJ1Y2tl
dCwgbV9vdXQuY29uc3RJbnRQdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVj
a2V0RGF0YUtleT4+OjplbXB0eVZhbHVlKCkpKSwKKyAgICAgICAgICAgIHVuc3VyZShub3RQcmVz
ZW50SW5UYWJsZSksIHVuc3VyZShub3RFbXB0eVZhbHVlKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obm90RW1wdHlWYWx1ZSwgbm90RGVsZXRlZFZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJh
bmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZGVsZXRlZFZhbHVlKCkp
KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKG5vdERlbGV0ZWRWYWx1
ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdERlbGV0ZWRWYWx1ZSwgbm90Qml0RXF1
YWwpOworICAgICAgICBMVmFsdWUgYnVja2V0S2V5ID0gbV9vdXQubG9hZDY0KGhhc2hNYXBCdWNr
ZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF9rZXkpOworICAgICAgICAvLyBQZXJmb3JtIE9iamVj
dC5pcygpCisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChrZXksIGJ1Y2tldEtleSks
CisgICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdEJpdEVxdWFsKSk7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90Qml0RXF1YWwsIGJ1Y2tldEtleUlzQ2VsbCk7
CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVu
c3VyZShidWNrZXRLZXlJc0NlbGwpLCB1bnN1cmUoYnVja2V0S2V5Tm90Q2VsbCkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJ1Y2tldEtleUlzQ2VsbCwgYm90aEFyZUNlbGxzKTsKKyAgICAg
ICAgbV9vdXQuYnJhbmNoKGlzQ2VsbChrZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJvdGhBcmVD
ZWxscyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYm90
aEFyZUNlbGxzLCBidWNrZXRLZXlJc1N0cmluZyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0
cmluZyhidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGJ1Y2tldEtleUlzU3RyaW5nKSwg
dW5zdXJlKGxvb3BBcm91bmQpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJ
c1N0cmluZywgYnVja2V0S2V5Tm90Q2VsbCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc1N0cmlu
ZyhrZXkpLAorICAgICAgICAgICAgdW5zdXJlKHNsb3dQYXRoKSwgdW5zdXJlKGxvb3BBcm91bmQp
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlOb3RDZWxsLCBidWNrZXRLZXlJ
c051bWJlcik7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdE51bWJlcihidWNrZXRLZXkpLAor
ICAgICAgICAgICAgdW5zdXJlKGxvb3BBcm91bmQpLCB1bnN1cmUoYnVja2V0S2V5SXNOdW1iZXIp
KTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc051bWJlciwgYm90aEFyZU51
bWJlcnMpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1iZXIoa2V5KSwKKyAgICAgICAg
ICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKGJvdGhBcmVOdW1iZXJzKSk7CisKKyAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oYm90aEFyZU51bWJlcnMsIGJ1Y2tldEtleUlzSW50MzIpOworICAg
ICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMihidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5z
dXJlKHNsb3dQYXRoKSwgdW5zdXJlKGJ1Y2tldEtleUlzSW50MzIpKTsKKworICAgICAgICBtX291
dC5hcHBlbmRUbyhidWNrZXRLZXlJc0ludDMyLCBsb29wQXJvdW5kKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKGlzTm90SW50MzIoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVu
c3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obG9vcEFyb3VuZCwg
c2xvd1BhdGgpOworICAgICAgICBtX291dC5hZGRJbmNvbWluZ1RvUGhpKHVubWFza2VkSW5kZXgs
IG1fb3V0LmFuY2hvcihtX291dC5hZGQoaW5kZXgsIG1fb3V0LmludDMyT25lKSkpOworICAgICAg
ICBtX291dC5qdW1wKGxvb3BTdGFydCk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1Bh
dGgsIG5vdFByZXNlbnRJblRhYmxlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1BhdGhS
ZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKHBvaW50ZXJUeXBlKCksCisgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24obV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNl
ID8gb3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0IDogb3BlcmF0aW9uSlNTZXRGaW5kQnVja2V0KSwg
bV9jYWxsRnJhbWUsIG1hcCwga2V5LCBoYXNoKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3RQcmVzZW50SW5UYWJsZSwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm90UHJlc2VudFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fb3V0LnBoaShwb2ludGVyVHlwZSgpLCBidWNr
ZXRSZXN1bHQsIHNsb3dQYXRoUmVzdWx0LCBub3RQcmVzZW50UmVzdWx0KSk7CisgICAgfQorCisg
ICAgdm9pZCBjb21waWxlTG9hZEZyb21KU01hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBMVmFs
dWUgbWFwQnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOworCisgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExC
YXNpY0Jsb2NrIGhhc0J1Y2tldCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisKKyAgICAgICAgVmFsdWVG
cm9tQmxvY2sgbm9CdWNrZXRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJbnQ2NChK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKworICAgICAgICBtX291dC5icmFuY2go
bV9vdXQuZXF1YWwobWFwQnVja2V0LCBtX291dC5jb25zdEludFB0cigwKSksCisgICAgICAgICAg
ICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKGhhc0J1Y2tldCkpOworCisgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaGFzQnVja2V0LCBjb250aW51YXRp
b24pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBidWNrZXRSZXN1bHQgPSBtX291dC5hbmNob3Io
bV9vdXQubG9hZDY0KG1hcEJ1Y2tldCwgbV9oZWFwcy5IYXNoTWFwQnVja2V0X3ZhbHVlKSk7Cisg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgc2V0SlNWYWx1ZShtX291dC5waGko
SW50NjQsIG5vQnVja2V0UmVzdWx0LCBidWNrZXRSZXN1bHQpKTsKKyAgICB9CisKKyAgICB2b2lk
IGNvbXBpbGVJc05vbkVtcHR5TWFwQnVja2V0KCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBidWNr
ZXQgPSBsb3dNYXBCdWNrZXQobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBtX291dC5ub3RFcXVhbChidWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKDApKTsKKyAgICAg
ICAgc2V0Qm9vbGVhbihyZXN1bHQpOworICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUlzT2JqZWN0
T3JOdWxsKCkKICAgICB7CiAgICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CkBAIC05OTgy
LDYgKzEwMjE4LDIwIEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChl
ZGdlLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExWYWx1
ZSBsb3dNYXBPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9
IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlLCByZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIExWYWx1ZSBsb3dTZXRPYmpl
Y3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRn
ZSk7CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCByZXN1bHQpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAgICBMVmFsdWUgbG93U3RyaW5nKEVkZ2UgZWRn
ZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0
aW9uKQogICAgIHsKQEAgLTEwMTA1LDYgKzEwMzU1LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHNl
dFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgfQorCisgICAgTFZhbHVlIGxvd01hcEJ1Y2tldChFZGdlIGVkZ2UpCisgICAgeworICAgICAg
ICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9tYXBCdWNrZXRWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHZh
bHVlLnZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbG93Q2VsbChl
ZGdlKTsKKyAgICAgICAgc2V0U3RvcmFnZShlZGdlLm5vZGUoKSwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIHN0cmljdEludDUyVG9JbnQz
MihFZGdlIGVkZ2UsIExWYWx1ZSB2YWx1ZSkKICAgICB7CkBAIC0xMDQwOCw2ICsxMDY2OSwxMiBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgICAgIHNw
ZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChlZGdlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIFN0cmluZ1VzZToKICAgICAgICAgICAgIHNwZWN1bGF0ZVN0cmluZyhlZGdlKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTA3MzYsNiArMTEwMDMsMjggQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIHNwZWN1bGF0ZVJlZ0V4cE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKICAg
ICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxs
KQorICAgIHsKKyAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICBqc1ZhbHVlVmFs
dWUoY2VsbCksIGVkZ2UsIFNwZWNNYXBPYmplY3QsIGlzTm90VHlwZShjZWxsLCBKU01hcFR5cGUp
KTsKKyAgICB9CisKKyAgICB2b2lkIHNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UpCisgICAg
eworICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CisgICAg
fQorCisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkK
KyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZhbHVl
KGNlbGwpLCBlZGdlLCBTcGVjU2V0T2JqZWN0LCBpc05vdFR5cGUoY2VsbCwgSlNTZXRUeXBlKSk7
CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlKQorICAgIHsK
KyAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAgIH0K
ICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZVN0cmluZyhFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQog
ICAgIHsKQEAgLTExNTA0LDYgKzExNzkzLDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBt
X3N0b3JhZ2VWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJs
b2NrKSk7CiAgICAgfQorICAgIHZvaWQgc2V0TWFwQnVja2V0KE5vZGUqIG5vZGUsIExWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fbWFwQnVja2V0VmFsdWVzLnNldChub2RlLCBMb3dlcmVk
Tm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOworICAgIH0KICAgICB2b2lkIHNldERvdWJs
ZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBtX2RvdWJsZVZhbHVl
cy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKQEAgLTEx
NTM3LDYgKzExODMwLDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXRTdG9yYWdlKG1f
bm9kZSwgdmFsdWUpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChMVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBzZXRNYXBCdWNrZXQobV9ub2RlLCB2YWx1ZSk7CisgICAgfQogICAg
IHZvaWQgc2V0RG91YmxlKExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHNldERvdWJsZSht
X25vZGUsIHZhbHVlKTsKQEAgLTExNzIwLDYgKzEyMDE3LDcgQEAgcHJpdmF0ZToKICAgICBIYXNo
TWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAgSGFzaE1h
cDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hNYXA8
Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5v
ZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX21hcEJ1Y2tldFZhbHVlczsKICAgICBIYXNoTWFwPE5v
ZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX2RvdWJsZVZhbHVlczsKICAgICAKICAgICAvLyBUaGlz
IGlzIGEgYml0IG9mIGEgaGFjay4gSXQgcHJldmVudHMgQjMgZnJvbSBoYXZpbmcgdG8gZG8gQ1NF
IG9uIGxvYWRpbmcgb2YgYXJndW1lbnRzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MjYsNiArNjI2LDUyIEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0RHVtYlZpcnR1YWxDYWwK
ICAgICAgICAgfSk7CiB9CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQordm9pZCBBc3NlbWJseUhlbHBl
cnM6OndhbmdzSW50NjRIYXNoKEdQUlJlZyBpbnB1dEFuZFJlc3VsdCwgR1BSUmVnIHNjcmF0Y2gp
Cit7CisgICAgR1BSUmVnIGlucHV0ID0gaW5wdXRBbmRSZXN1bHQ7CisgICAgLy8ga2V5ICs9IH4o
a2V5IDw8IDMyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVz
dGVkSW1tMzIoMzIpLCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsKKyAgICBhZGQ2NChz
Y3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gMjIpOworICAgIG1vdmUoaW5w
dXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoMjIpLCBzY3JhdGNoKTsK
KyAgICB4b3I2NChzY3JhdGNoLCBpbnB1dCk7CisgICAgLy8ga2V5ICs9IH4oa2V5IDw8IDEzKTsK
KyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMTMp
LCBzY3JhdGNoKTsKKyAgICBub3Q2NChzY3JhdGNoKTsKKyAgICBhZGQ2NChzY3JhdGNoLCBpbnB1
dCk7CisgICAgLy8ga2V5IF49IChrZXkgPj4gOCk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7
CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMig4KSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2Ny
YXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSAoa2V5IDw8IDMpOworICAgIG1vdmUoaW5wdXQs
IHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigzKSwgc2NyYXRjaCk7CisgICAg
YWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDE1KTsKKyAgICBt
b3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDE1KSwgc2Ny
YXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtleSA8
PCAyNyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZElt
bTMyKDI3KSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRj
aCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICBtb3ZlKGlucHV0LCBz
Y3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMxKSwgc2NyYXRjaCk7CisgICAg
eG9yNjQoc2NyYXRjaCwgaW5wdXQpOworCisgICAgLy8gcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyZXN1bHQpCisgICAgdm9pZCogbWFzayA9IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8dWludHB0cl90PihVSU5UX01BWCkpOworICAgIGFuZDY0KFRydXN0ZWRJbW1QdHIobWFz
ayksIGlucHV0QW5kUmVzdWx0KTsKK30KKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQorCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDIwNTQ5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgQVNTRVJUKG1fYmFzZWxp
bmVDb2RlQmxvY2stPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpOb25lIHx8IEpJVENvZGU6OmlzQmFz
ZWxpbmVDb2RlKG1fYmFzZWxpbmVDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2soKSB7IHJldHVybiBtX2NvZGVC
bG9jazsgfQogICAgIFZNKiB2bSgpIHsgcmV0dXJuIG1fdm07IH0KICAgICBBc3NlbWJsZXJUeXBl
X1QmIGFzc2VtYmxlcigpIHsgcmV0dXJuIG1fYXNzZW1ibGVyOyB9CkBAIC0xNTI4LDYgKzE1Mjgs
MTAgQEAgcHVibGljOgogICAgICAgICBlbWl0QWxsb2NhdGVKU09iamVjdDxDbGFzc1R5cGU+KHJl
c3VsdEdQUiwgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBUcnVzdGVkSW1tUHRyKDApLCBzY3Jh
dGNoR1BSMSwgc2NyYXRjaEdQUjIsIHNsb3dQYXRoKTsKICAgICAgICAgc3RvcmVQdHIoVHJ1c3Rl
ZEltbVB0cihzdHJ1Y3R1cmUtPmNsYXNzSW5mbygpKSwgQWRkcmVzcyhyZXN1bHRHUFIsIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0OjpjbGFzc0luZm9PZmZzZXQoKSkpOwogICAgIH0KKworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgdm9pZCB3YW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQs
IEdQUlJlZyBzY3JhdGNoKTsKKyNlbmRpZgogICAgIAogcHJvdGVjdGVkOgogICAgIFZNKiBtX3Zt
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlz
aW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMDUsNiArMjA1LDcgQEAgdHlwZWRlZiBKU0NlbGwqIChKSVRf
T1BFUkFUSU9OICpDX0pJVE9wZQogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJ
VE9wZXJhdGlvbl9FU3RaWikoRXhlY1N0YXRlKiwgU3RydWN0dXJlKiwgaW50MzJfdCwgaW50MzJf
dCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VaKShF
eGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRUpzY0kpKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBVbmlxdWVkU3RyaW5nSW1w
bCopOwordHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FQ0pa
KShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCk7CiB0eXBlZGVm
IGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fRCkoZG91YmxlKTsKIHR5cGVk
ZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9HKShKU0dsb2JhbE9iamVj
dCopOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0REKShk
b3VibGUsIGRvdWJsZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL01vZHVs
ZUFuYWx5emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L01vZHVsZUFuYWx5emVyLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcg
KzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIE1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFseXpl
cihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRW
YXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCiAg
ICAgOiBtX3ZtKCZleGVjLT52bSgpKQotICAgICwgbV9tb2R1bGVSZWNvcmQoZXhlYy0+dm0oKSwg
SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZShleGVjLT52bSgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2Jq
ZWN0KCktPm1vZHVsZVJlY29yZFN0cnVjdHVyZSgpLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRl
Y2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKSkKKyAgICAsIG1fbW9kdWxlUmVjb3Jk
KGV4ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYywgZXhlYy0+dm0oKSwgZXhl
Yy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxl
S2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykpCiB7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNo
TWFwSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKKworI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5o
IgorI2luY2x1ZGUgIkNvcHlWaXNpdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
dGVtcGxhdGU8PgorY29uc3QgSlNfRVhQT1JUREFUQSBDbGFzc0luZm8gSGFzaE1hcEJ1Y2tldDxI
YXNoTWFwQnVja2V0RGF0YUtleT46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEJ1Y2tldCIsIG51
bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleT4pIH07CisKK3RlbXBsYXRlPD4KK2NvbnN0IEpTX0VYUE9SVERBVEEgQ2xhc3NJbmZv
IEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnNfaW5mbyA9CisgICAg
eyAiSGFzaE1hcEJ1Y2tldCIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPikgfTsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIERhdGE+Cit2b2lkIEhhc2hNYXBCdWNrZXQ8RGF0YT46OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwQnVja2V0KiB0aGlz
T2JqZWN0ID0ganNDYXN0PEhhc2hNYXBCdWNrZXQqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJl
bih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX25leHQpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ByZXYpOworCisg
ICAgc3RhdGljX2Fzc2VydChzaXplb2YoRGF0YSkgJSBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25v
d24+KSA9PSAwLCAiV2UgYXNzdW1lIHRoYXQgdGhlc2UgYXJlIGZpbGxlZCB3aXRoIFdyaXRlQmFy
cmllcjxVbmtub3duPiBtZW1iZXJzIG9ubHkuIik7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMo
Yml0d2lzZV9jYXN0PFdyaXRlQmFycmllcjxVbmtub3duPio+KCZ0aGlzT2JqZWN0LT5tX2RhdGEp
LCBzaXplb2YoRGF0YSkgLyBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSk7Cit9CisKK3Rl
bXBsYXRlPD4KK2NvbnN0IEpTX0VYUE9SVERBVEEgQ2xhc3NJbmZvIEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6c19pbmZvID0KKyAgICB7ICJIYXNoTWFw
SW1wbCIsIG51bGxwdHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEltcGw8SGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+KSB9OworCit0ZW1wbGF0ZTw+Citjb25zdCBK
U19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+Pjo6c19pbmZvID0KKyAgICB7ICJIYXNoTWFwSW1wbCIsIG51bGxw
dHIsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNo
TWFwQnVja2V0RGF0YUtleVZhbHVlPj4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFw
QnVja2V0Pgordm9pZCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEhhc2hNYXBJbXBsKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9oZWFkKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV90YWlsKTsKKwor
ICAgIHZpc2l0b3IuY29weUxhdGVyKHRoaXNPYmplY3QsIE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tl
biwgdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCksIHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5
dGVzKCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3ZvaWQgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBD
b3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQoreworICAgIEJhc2U6OmNvcHlC
YWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOworCisgICAgSGFzaE1hcEltcGwqIHRo
aXNPYmplY3QgPSBqc0Nhc3Q8SGFzaE1hcEltcGwqPihjZWxsKTsKKyAgICBpZiAodG9rZW4gPT0g
TWFwQmFja2luZ1N0b3JlQ29weVRva2VuICYmIHZpc2l0b3IuY2hlY2tJZlNob3VsZENvcHkodGhp
c09iamVjdC0+bV9idWZmZXIuZ2V0KCkpKSB7CisgICAgICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBv
bGRCdWZmZXIgPSB0aGlzT2JqZWN0LT5tX2J1ZmZlci5nZXQoKTsKKyAgICAgICAgc2l6ZV90IGJ1
ZmZlclNpemVJbkJ5dGVzID0gdGhpc09iamVjdC0+YnVmZmVyU2l6ZUluQnl0ZXMoKTsKKyAgICAg
ICAgSGFzaE1hcEJ1ZmZlclR5cGUqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PEhhc2hNYXBCdWZm
ZXJUeXBlKj4odmlzaXRvci5hbGxvY2F0ZU5ld1NwYWNlKGJ1ZmZlclNpemVJbkJ5dGVzKSk7Cisg
ICAgICAgIG1lbWNweShuZXdCdWZmZXIsIG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOwor
ICAgICAgICB0aGlzT2JqZWN0LT5tX2J1ZmZlci5zZXRXaXRob3V0QmFycmllcihuZXdCdWZmZXIp
OworICAgICAgICB2aXNpdG9yLmRpZENvcHkob2xkQnVmZmVyLCBidWZmZXJTaXplSW5CeXRlcyk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBIYXNoTWFwQnVja2V0RGF0YUtleSB7
CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IGtleTsKK307CisKK3N0cnVjdCBIYXNoTWFwQnVj
a2V0RGF0YUtleVZhbHVlIHsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4ga2V5OworICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiB2YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYXRh
PgorY2xhc3MgSGFzaE1hcEJ1Y2tldCA6IHB1YmxpYyBKU0NlbGwgeworICAgIHR5cGVkZWYgSlND
ZWxsIEJhc2U7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3RhdGlj
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0
YUtleT46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZtKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuZ2V0KCk7
CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0
eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBzZWxlY3RTdHJ1Y3R1cmUoVk0mIHZt
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuZ2V0
KCk7CisgICAgfQorCitwdWJsaWM6CisgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKKworICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2Vs
bFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFz
aE1hcEJ1Y2tldCogY3JlYXRlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXQq
IGJ1Y2tldCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEhhc2hNYXBCdWNrZXQ8RGF0YT4+
KHZtLmhlYXApKSBIYXNoTWFwQnVja2V0KHZtLCBzZWxlY3RTdHJ1Y3R1cmUodm0pKTsKKyAgICAg
ICAgYnVja2V0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIEFTU0VSVCghYnVja2V0LT5u
ZXh0KCkpOworICAgICAgICBBU1NFUlQoIWJ1Y2tldC0+cHJldigpKTsKKyAgICAgICAgcmV0dXJu
IGJ1Y2tldDsKKyAgICB9CisKKyAgICBIYXNoTWFwQnVja2V0KFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAgIHsgfQorCisgICAg
QUxXQVlTX0lOTElORSB2b2lkIHNldE5leHQoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQp
CisgICAgeworICAgICAgICBtX25leHQuc2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0KKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UHJldihWTSYgdm0sIEhhc2hNYXBCdWNrZXQqIGJ1Y2tl
dCkKKyAgICB7CisgICAgICAgIG1fcHJldi5zZXQodm0sIHRoaXMsIGJ1Y2tldCk7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEtleShWTSYgdm0sIEpTVmFsdWUga2V5KQorICAg
IHsKKyAgICAgICAgbV9kYXRhLmtleS5zZXQodm0sIHRoaXMsIGtleSk7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+
Ojp2YWx1ZT46OnR5cGUgc2V0VmFsdWUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9kYXRhLnZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgIH0KKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXk+Ojp2YWx1ZT46
OnR5cGUgc2V0VmFsdWUoVk0mLCBKU1ZhbHVlKSB7IH0KKworICAgIEFMV0FZU19JTkxJTkUgSlNW
YWx1ZSBrZXkoKSBjb25zdCB7IHJldHVybiBtX2RhdGEua2V5LmdldCgpOyB9CisKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgQUxXQVlTX0lOTElORSB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZh
bHVlLCBKU1ZhbHVlPjo6dHlwZSB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9kYXRhLnZhbHVlLmdldCgpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1
Y2tldCogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQorICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEJ1Y2tldCogcHJldigpIGNvbnN0IHsgcmV0dXJuIG1fcHJldi5nZXQoKTsg
fQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGRlbGV0ZWQoKSBjb25zdCB7IHJldHVybiBtX2Rl
bGV0ZWQ7IH0KKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RGVsZXRlZChib29sIGRlbGV0ZWQp
IHsgbV9kZWxldGVkID0gZGVsZXRlZDsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRP
ZktleSgpCisgICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBCdWNr
ZXQsIG1fZGF0YSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRGF0YSwga2V5KTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IERhdGE+CisgICAgc3RhdGljIHR5cGVuYW1lIHN0ZDo6ZW5h
YmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWUs
IHB0cmRpZmZfdD46OnR5cGUgb2Zmc2V0T2ZWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEhhc2hNYXBCdWNrZXQsIG1fZGF0YSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RGF0YSwgdmFsdWUpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBEYXRhIG1fZGF0YTsKKyAgICBX
cml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9uZXh0OworICAgIFdyaXRlQmFycmllcjxIYXNo
TWFwQnVja2V0PiBtX3ByZXY7CisgICAgYm9vbCBtX2RlbGV0ZWQgeyBmYWxzZSB9OworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIEJ1Y2tldFR5cGU+CitjbGFzcyBIYXNoTWFwQnVmZmVyIHsKK3B1
YmxpYzoKKyAgICBIYXNoTWFwQnVmZmVyKCkgPSBkZWxldGU7CisKKyAgICBzdGF0aWMgc2l6ZV90
IGFsbG9jYXRpb25TaXplKHVpbnQzMl90IGNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNhcGFjaXR5ICogc2l6ZW9mKEJ1Y2tldFR5cGUqKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5M
SU5FIEJ1Y2tldFR5cGUqKiBidWZmZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxCdWNrZXRUeXBlKio+KHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNo
TWFwQnVmZmVyKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTQ2VsbCogb3duZXIs
IHVpbnQzMl90IGNhcGFjaXR5KQorICAgIHsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVf
VEhST1dfU0NPUEUodm0pOworICAgICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBIYXNoTWFw
QnVmZmVyOjphbGxvY2F0aW9uU2l6ZShjYXBhY2l0eSk7CisgICAgICAgIHZvaWQqIGRhdGEgPSBu
dWxscHRyOworICAgICAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVyKHZtLmhlYXApOworICAgICAg
ICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKG93bmVyLCBhbGxvY2F0aW9uU2l6ZSwg
JmRhdGEpKSB7CisgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhlYywgc2NvcGUp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBIYXNo
TWFwQnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyKj4oZGF0YSk7Cisg
ICAgICAgIG1lbXNldChidWZmZXIsIC0xLCBhbGxvY2F0aW9uU2l6ZSk7CisgICAgICAgIHJldHVy
biBidWZmZXI7CisgICAgfQorfTsKKworQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBhcmVLZXlz
RXF1YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICAvLyBX
ZSB3YW50ICswIGFuZCAtMCB0byBiZSBjb21wYXJlZCB0byB0cnVlIGhlcmUuIHNhbWVWYWx1ZSgp
IGl0c2VsZiBkb2Vzbid0CisgICAgLy8gZ3VhcmFudGVlIHRoYXQsIGhvd2V2ZXIsIHdlIG5vcm1h
bGl6ZSBhbGwga2V5cyBiZWZvcmUgY29tcGFyaW5nIGFuZCBzdG9yaW5nCisgICAgLy8gdGhlbSBp
biB0aGUgbWFwLiBUaGUgbm9ybWFsaXphdGlvbiB3aWxsIGNvbnZlcnQgLTAuMCBhbmQgMC4wIHRv
IHRoZSBpbnRlZ2VyCisgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIDAuCisgICAgcmV0dXJuIHNh
bWVWYWx1ZShleGVjLCBhLCBiKTsKK30KKworQUxXQVlTX0lOTElORSBKU1ZhbHVlIG5vcm1hbGl6
ZU1hcEtleShKU1ZhbHVlIGtleSkKK3sKKyAgICBpZiAoIWtleS5pc051bWJlcigpKQorICAgICAg
ICByZXR1cm4ga2V5OworCisgICAgaWYgKGtleS5pc0ludDMyKCkpCisgICAgICAgIHJldHVybiBr
ZXk7CisKKyAgICBkb3VibGUgZCA9IGtleS5hc0RvdWJsZSgpOworICAgIGlmIChzdGQ6OmlzbmFu
KGQpKQorICAgICAgICByZXR1cm4ga2V5OworCisgICAgaW50IGkgPSBzdGF0aWNfY2FzdDxpbnQ+
KGQpOworICAgIGlmIChpID09IGQpIHsKKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyAtMCwgd2Ug
Y29udmVydCBpdCB0byBwb3NpdGl2ZSB6ZXJvLgorICAgICAgICAvLyBXaGVuIGEga2V5IGlzIHRo
ZSBkb3VibGUgcmVwcmVzZW50YXRpb24gZm9yIGFuIGludGVnZXIsIHdlIGNvbnZlcnQgaXQgdG8g
YW4gaW50ZWdlci4KKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGkpOworICAgIH0KKyAgICAvLyBU
aGlzIG1lYW5zIGtleSBpcyBkZWZpbml0ZWx5IG5vdCBuZWdhdGl2ZSB6ZXJvLCBhbmQgaXQncyBk
ZWZpbml0ZWx5IG5vdCBhIGRvdWJsZSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiAKKyAg
ICByZXR1cm4ga2V5OworfQorCitBTFdBWVNfSU5MSU5FIHVpbnQzMl90IGpzTWFwSGFzaChFeGVj
U3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKG5vcm1hbGl6ZU1hcEtleSh2YWx1ZSkgPT0gdmFsdWUsICJXZSBleHBlY3Qgbm9ybWFs
aXplZCB2YWx1ZXMgZmxvd2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uIik7CisKKyAgICBhdXRvIHNj
b3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBpZiAodmFsdWUuaXNTdHJpbmco
KSkgeworICAgICAgICBKU1N0cmluZyogc3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgICAg
ICBjb25zdCBTdHJpbmcmIHd0ZlN0cmluZyA9IHN0cmluZy0+dmFsdWUoZXhlYyk7CisgICAgICAg
IGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gVUlO
VF9NQVg7CisgICAgICAgIHJldHVybiB3dGZTdHJpbmcuaW1wbCgpLT5oYXNoKCk7CisgICAgfQor
CisgICAgYXV0byB3YW5nc0ludDY0SGFzaCA9IFtdICh1aW50NjRfdCBrZXkpIC0+IHVpbnQzMl90
IHsKKyAgICAgICAga2V5ICs9IH4oa2V5IDw8IDMyKTsKKyAgICAgICAga2V5IF49IChrZXkgPj4g
MjIpOworICAgICAgICBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgICAgICBrZXkgXj0gKGtleSA+
PiA4KTsKKyAgICAgICAga2V5ICs9IChrZXkgPDwgMyk7CisgICAgICAgIGtleSBePSAoa2V5ID4+
IDE1KTsKKyAgICAgICAga2V5ICs9IH4oa2V5IDw8IDI3KTsKKyAgICAgICAga2V5IF49IChrZXkg
Pj4gMzEpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGtleSk7CisgICAg
fTsKKyAgICB1aW50NjRfdCByYXdWYWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAg
cmV0dXJuIHdhbmdzSW50NjRIYXNoKHJhd1ZhbHVlKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1l
IEhhc2hNYXBCdWNrZXRUeXBlPgorY2xhc3MgSGFzaE1hcEltcGwgOiBwdWJsaWMgSlNDZWxsIHsK
KyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIHR5cGVkZWYgSGFzaE1hcEJ1ZmZlcjxIYXNo
TWFwQnVja2V0VHlwZT4gSGFzaE1hcEJ1ZmZlclR5cGU7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCA9IEhhc2hNYXBCdWNrZXRUeXBlPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJs
ZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+
Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7
CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbFNldFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCA9IEhhc2hNYXBCdWNrZXRUeXBlPgorICAgIHN0
YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tl
dDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnZhbHVlLCBTdHJ1Y3R1cmUqPjo6dHlwZSBz
ZWxlY3RTdHJ1Y3R1cmUoVk0mIHZtKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZtLmhhc2hNYXBJ
bXBsTWFwU3RydWN0dXJlLmdldCgpOworICAgIH0KKworcHVibGljOgorICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
fQorCisgICAgc3RhdGljIEhhc2hNYXBJbXBsKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYg
dm0pCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXk+OjpvZmZzZXRPZktleSgpID09IEhhc2hNYXBCdWNrZXQ8SGFzaE1h
cEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mS2V5KCksICJXZSBhc3N1bWUgdGhpcyB0byBi
ZSB0cnVlIGluIHRoZSBERkcgYW5kIEZUTCBKSVQuIik7CisKKyAgICAgICAgSGFzaE1hcEltcGwq
IGltcGwgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNoTWFwSW1wbD4odm0uaGVhcCkp
IEhhc2hNYXBJbXBsKHZtLCBzZWxlY3RTdHJ1Y3R1cmUodm0pKTsKKyAgICAgICAgaW1wbC0+Zmlu
aXNoQ3JlYXRpb24oZXhlYywgdm0pOworICAgICAgICByZXR1cm4gaW1wbDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAg
c3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlU
b2tlbik7CisKKyAgICBIYXNoTWFwSW1wbChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX3NpemUoMCkKKyAgICAg
ICAgLCBtX2RlbGV0ZUNvdW50KDApCisgICAgICAgICwgbV9jYXBhY2l0eSg0KQorICAgIHsKKyAg
ICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlci5nZXQoKS0+YnVmZmVyKCk7CisgICAg
fQorCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSkKKyAg
ICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgICAgIG1ha2VBbmRTZXROZXdCdWZm
ZXIoZXhlYywgdm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1faGVhZC5zZXQodm0sIHRoaXMsIEhhc2hN
YXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgbV90YWlsLnNldCh2bSwgdGhpcywg
SGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSkpOworCisgICAgICAgIG1faGVhZC0+c2V0TmV4
dCh2bSwgbV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQu
Z2V0KCkpOworICAgICAgICBtX2hlYWQtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAgIG1fdGFp
bC0+c2V0RGVsZXRlZCh0cnVlKTsKKworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0
VHlwZSogZW1wdHlWYWx1ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEhh
c2hNYXBCdWNrZXRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigtMSkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFbXB0eShIYXNoTWFwQnVja2V0VHlwZSog
YnVja2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ1Y2tldCA9PSBlbXB0eVZhbHVlKCk7Cisg
ICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXRUeXBlKiBkZWxldGVkVmFsdWUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0VHlwZSo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oLTMpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzRGVsZXRlZChIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGJ1Y2tldCA9PSBkZWxldGVkVmFsdWUoKTsKKyAgICB9CisKKyAgICBBTFdBWVNf
SU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAg
dWludDMyX3QgaGFzaCA9IGpzTWFwSGFzaChleGVjLCB2bSwga2V5KTsKKyAgICAgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBmaW5kQnVja2V0KGV4ZWMsIGtleSwgaGFzaCk7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGtleSwgdWludDMyX3QgaGFzaCkKKyAgICB7CisgICAgICAgIGtleSA9IG5vcm1hbGl6ZU1h
cEtleShrZXkpOworICAgICAgICByZXR1cm4gZmluZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3Jt
YWxpemVkKGV4ZWMsIGtleSwgaGFzaCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgaWYg
KEhhc2hNYXBCdWNrZXRUeXBlKiogYnVja2V0ID0gZmluZEJ1Y2tldChleGVjLCBrZXkpKQorICAg
ICAgICAgICAgcmV0dXJuICgqYnVja2V0KS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIGhhcyhFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhZmluZEJ1Y2tldChl
eGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhZGQoRXhlY1N0YXRl
KiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICB7Cisg
ICAgICAgIGtleSA9IG5vcm1hbGl6ZU1hcEtleShrZXkpOworCisgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAg
IHVpbnQzMl90IGluZGV4ID0ganNNYXBIYXNoKGV4ZWMsIHZtLCBrZXkpICYgbWFzazsKKyAgICAg
ICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAg
ICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAg
IHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZChi
dWNrZXQpICYmIGFyZUtleXNFcXVhbChleGVjLCBrZXksIGJ1Y2tldC0+a2V5KCkpKSB7CisgICAg
ICAgICAgICAgICAgYnVja2V0LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkg
JiBtYXNrOworICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgfQor
CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXdFbnRyeSA9IG1fdGFpbC5nZXQoKTsKKyAg
ICAgICAgYnVmZmVyW2luZGV4XSA9IG5ld0VudHJ5OworICAgICAgICBuZXdFbnRyeS0+c2V0S2V5
KHZtLCBrZXkpOworICAgICAgICBuZXdFbnRyeS0+c2V0VmFsdWUodm0sIHZhbHVlKTsKKyAgICAg
ICAgbmV3RW50cnktPnNldERlbGV0ZWQoZmFsc2UpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlw
ZSogbmV3VGFpbCA9IEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pOworICAgICAgICBtX3Rh
aWwuc2V0KHZtLCB0aGlzLCBuZXdUYWlsKTsKKyAgICAgICAgbmV3VGFpbC0+c2V0UHJldih2bSwg
bmV3RW50cnkpOworICAgICAgICBuZXdUYWlsLT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBu
ZXdFbnRyeS0+c2V0TmV4dCh2bSwgbmV3VGFpbCk7CisgICAgICAgIHVpbnQzMl90IG5ld1NpemUg
PSArK21fc2l6ZTsKKyAgICAgICAgaWYgKDIqbmV3U2l6ZSA+IG1fY2FwYWNpdHkpCisgICAgICAg
ICAgICByZWhhc2goZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIHJlbW92
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSk7CisgICAgICAgIGlmICgh
YnVja2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBpbXBsID0gKmJ1Y2tldDsKKyAg
ICAgICAgaW1wbC0+bmV4dCgpLT5zZXRQcmV2KHZtLCBpbXBsLT5wcmV2KCkpOworICAgICAgICBp
bXBsLT5wcmV2KCktPnNldE5leHQodm0sIGltcGwtPm5leHQoKSk7CisgICAgICAgIGltcGwtPnNl
dERlbGV0ZWQodHJ1ZSk7CisKKyAgICAgICAgKmJ1Y2tldCA9IGRlbGV0ZWRWYWx1ZSgpOworCisg
ICAgICAgIG1fZGVsZXRlQ291bnQrKzsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIHVpbnQzMl90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV9zaXplID49IG1fZGVsZXRlQ291bnQpOworICAgICAgICByZXR1cm4g
bV9zaXplIC0gbV9kZWxldGVDb3VudDsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
Y2xlYXIoRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICAgICAgbV9zaXplID0gMDsKKyAgICAgICAgbV9kZWxldGVDb3VudCA9IDA7CisgICAg
ICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBoZWFkID0gbV9oZWFkLmdldCgpOworICAgICAgICBIYXNo
TWFwQnVja2V0VHlwZSogYnVja2V0ID0gbV9oZWFkLT5uZXh0KCk7CisgICAgICAgIEhhc2hNYXBC
dWNrZXRUeXBlKiB0YWlsID0gbV90YWlsLmdldCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICE9
IHRhaWwpIHsKKyAgICAgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXh0ID0gYnVja2V0LT5u
ZXh0KCk7CisgICAgICAgICAgICAvLyBXZSByZXN0YXJ0IGVhY2ggaXRlcmF0b3IgYnkgcG9pbnRp
bmcgaXQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuCisgICAgICAgICAgICBidWNrZXQtPnNldE5l
eHQodm0sIGhlYWQpOworICAgICAgICAgICAgYnVja2V0ID0gbmV4dDsKKyAgICAgICAgfQorICAg
ICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+
c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9jYXBhY2l0eSA9IDQ7CisgICAg
ICAgIG1ha2VBbmRTZXROZXdCdWZmZXIoZXhlYywgdm0pOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgc2l6ZV90IGJ1ZmZlclNpemVJbkJ5dGVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2NhcGFjaXR5ICogc2l6ZW9mKEhhc2hNYXBCdWNrZXRUeXBlKik7CisgICAgfQorCisg
ICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJ1ZmZlcigpCisgICAgeworICAgICAgICByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXRUeXBlPiwgbV9idWZm
ZXIpOworICAgIH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDYXBhY2l0eSgpCisg
ICAgeworICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEhhc2hNYXBJbXBsPEhhc2hNYXBC
dWNrZXRUeXBlPiwgbV9jYXBhY2l0eSk7CisgICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldFR5cGUq
IGhlYWQoKSB7IHJldHVybiBtX2hlYWQuZ2V0KCk7IH0KKyAgICBIYXNoTWFwQnVja2V0VHlwZSog
dGFpbCgpIHsgcmV0dXJuIG1fdGFpbC5nZXQoKTsgfQorCisgICAgc2l6ZV90IGFwcHJveGltYXRl
U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihIYXNoTWFw
SW1wbCk7CisgICAgICAgIHNpemUgKz0gYnVmZmVyU2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgc2l6
ZSArPSAyICogc2l6ZW9mKEhhc2hNYXBCdWNrZXRUeXBlKTsgLy8gSGVhZCBhbmQgdGFpbCBtZW1i
ZXJzLgorICAgICAgICBzaXplICs9IChtX2RlbGV0ZUNvdW50ICsgbV9zaXplKSAqIHNpemVvZihI
YXNoTWFwQnVja2V0VHlwZSk7IC8vIE51bWJlciBvZiBtZW1iZXJzIG9uIHRoZSBsaXN0LgorICAg
ICAgICByZXR1cm4gc2l6ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQUxXQVlTX0lOTElORSBI
YXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXplZChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAg
ICAgY29uc3QgdWludDMyX3QgbWFzayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICB1aW50MzJf
dCBpbmRleCA9IGhhc2ggJiBtYXNrOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZl
ciA9IHRoaXMtPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0g
YnVmZmVyW2luZGV4XTsKKworICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAg
ICAgICAgICAgaWYgKCFpc0RlbGV0ZWQoYnVja2V0KSAmJiBhcmVLZXlzRXF1YWwoZXhlYywga2V5
LCBidWNrZXQtPmtleSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYnVmZmVyICsgaW5kZXg7
CisgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgIGJ1
Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgdm9pZCByZWhhc2goRXhlY1N0YXRlKiBleGVjKQorICAgIHsKKyAgICAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOworCisgICAgICAgIG1fY2FwYWNpdHkgPSBtX2NhcGFjaXR5ICogMjsKKyAg
ICAgICAgbWFrZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgICAgIGlmIChVTkxJS0VM
WShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldFR5cGUqIGl0ZXIgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIGVuZCA9IG1fdGFpbC5nZXQoKTsKKyAgICAgICAgY29uc3QgdWludDMyX3QgbWFz
ayA9IG1fY2FwYWNpdHkgLSAxOworICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fY2FwYWNpdHkg
JiAobV9jYXBhY2l0eSAtIDEpKSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVy
ID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAgIHdoaWxlIChpdGVyICE9IGVuZCkgeworICAgICAg
ICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0sIGl0ZXItPmtleSgpKSAm
IG1hc2s7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFzY29wZS5leGNlcHRpb24o
KSwgIkFsbCBrZXlzIHNob3VsZCBhbHJlYWR5IGJlIGhhc2hlZCBiZWZvcmUsIHNvIHRoaXMgc2hv
dWxkIG5vdCB0aHJvdyBiZWNhdXNlIGl0IHdvbid0IHJlc29sdmUgcm9wZXMuIik7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGJ1ZmZl
cltpbmRleF07CisgICAgICAgICAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAg
ICAgICAgICAgIGJ1Y2tldCA9IGJ1ZmZlcltpbmRleF07CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyW2luZGV4XSA9IGl0ZXI7CisgICAgICAgICAg
ICBpdGVyID0gaXRlci0+bmV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCBtYWtl
QW5kU2V0TmV3QnVmZmVyKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKworICAgICAgICBIYXNo
TWFwQnVmZmVyVHlwZSogYnVmZmVyID0gSGFzaE1hcEJ1ZmZlclR5cGU6OmNyZWF0ZShleGVjLCB2
bSwgdGhpcywgbV9jYXBhY2l0eSk7CisgICAgICAgIGlmIChVTkxJS0VMWSghYnVmZmVyKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2J1ZmZlci5zZXQodm0sIHRoaXMsIGJ1ZmZl
cik7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgaSsrKQorICAgICAgICAgICAgICAgIEFTU0VS
VChpc0VtcHR5KHRoaXMtPmJ1ZmZlcigpW2ldKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBX
cml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1faGVhZDsKKyAgICBXcml0ZUJhcnJpZXI8
SGFzaE1hcEJ1Y2tldFR5cGU+IG1fdGFpbDsKKyAgICBDb3B5QmFycmllcjxIYXNoTWFwQnVmZmVy
VHlwZT4gbV9idWZmZXI7CisgICAgdWludDMyX3QgbV9zaXplOworICAgIHVpbnQzMl90IG1fZGVs
ZXRlQ291bnQ7CisgICAgdWludDMyX3QgbV9jYXBhY2l0eTsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHJl
dmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNp
Yy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw5IEBAIGVudW0gSlNfRVhQT1JUX1BSSVZB
VEUgSW50cmluc2ljIHsKICAgICBJc1JlZ0V4cE9iamVjdEludHJpbnNpYywKICAgICBJc1R5cGVk
QXJyYXlWaWV3SW50cmluc2ljLAogICAgIEJvdW5kVGhpc05vQXJnc0Z1bmN0aW9uQ2FsbEludHJp
bnNpYywKKyAgICBKU01hcEdldEludHJpbnNpYywKKyAgICBKU01hcEhhc0ludHJpbnNpYywKKyAg
ICBKU1NldEhhc0ludHJpbnNpYywKIAogICAgIC8vIEdldHRlciBpbnRyaW5zaWNzLgogICAgIFR5
cGVkQXJyYXlMZW5ndGhJbnRyaW5zaWMsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwNiw2ICs2MDYs
OSBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTQ2VsbCogYSwgCiAKIGJvb2wgaXNU
aGlzVmFsdWVBbHRlcmVkKGNvbnN0IFB1dFByb3BlcnR5U2xvdCYsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0KTsKIAorLy8gU2VlIHNlY3Rpb24gNy4yLjk6IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNt
YTI2Mi8jc2VjLXNhbWV2YWx1ZQorYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBh
LCBKU1ZhbHVlIGIpOworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEpTQ0pTVmFs
dWVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1Zh
bHVlSW5saW5lcy5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDU4LDYgKzEw
NTgsMjIgQEAgQUxXQVlTX0lOTElORSBib29sIGlzVGhpc1ZhbHVlQWx0ZXJlZChjbwogICAgIHJl
dHVybiB0cnVlOwogfQogCisvLyBTZWUgc2VjdGlvbiA3LjIuOTogaHR0cHM6Ly90YzM5LmdpdGh1
Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVlCitBTFdBWVNfSU5MSU5FIGJvb2wgc2FtZVZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgaWYgKCFhLmlz
TnVtYmVyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBhLCBi
KTsKKyAgICBpZiAoIWIuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRv
dWJsZSB4ID0gYS5hc051bWJlcigpOworICAgIGRvdWJsZSB5ID0gYi5hc051bWJlcigpOworICAg
IGJvb2wgeElzTmFOID0gc3RkOjppc25hbih4KTsKKyAgICBib29sIHlJc05hTiA9IHN0ZDo6aXNu
YW4oeSk7CisgICAgaWYgKHhJc05hTiB8fCB5SXNOYU4pCisgICAgICAgIHJldHVybiB4SXNOYU4g
JiYgeUlzTmFOOworICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpID09IGJpdHdp
c2VfY2FzdDx1aW50NjRfdD4oeSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYg
Ly8gSlNWYWx1ZUlubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NDEsNyArNjQxLDcgQEAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3Bl
cgogICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5S
ZWZsZWN0LCByZWZsZWN0T2JqZWN0LCBEb250RW51bSk7CiAKICAgICBtX21vZHVsZUxvYWRlclN0
cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IHRoaXMsIG1fbW9kdWxlTG9hZGVyUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9tb2R1bGVMb2Fk
ZXIuc2V0KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKHZtLCB0aGlzLCBtX21vZHVs
ZUxvYWRlclN0cnVjdHVyZS5nZXQoKSkpOworICAgIG1fbW9kdWxlTG9hZGVyLnNldCh2bSwgdGhp
cywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZShnbG9iYWxFeGVjKCksIHZtLCB0aGlzLCBtX21vZHVs
ZUxvYWRlclN0cnVjdHVyZS5nZXQoKSkpOwogICAgIGlmIChPcHRpb25zOjpleHBvc2VJbnRlcm5h
bE1vZHVsZUxvYWRlcigpKQogICAgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwg
dm0ucHJvcGVydHlOYW1lcy0+TG9hZGVyLCBtX21vZHVsZUxvYWRlci5nZXQoKSwgRG9udEVudW0p
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuY3BwCShyZXZpc2lv
biAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDc4ICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTTWFwLmgiCiAKLSNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTTWFwSXRlcmF0b3IuaCIKLSNpbmNs
dWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNNYXA6OnNfaW5mbyA9IHsgIk1h
cCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNNYXApIH07CiAKLXZv
aWQgSlNNYXA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIEpTTWFwKiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNNYXA6On5KU01hcCgp
OwotfQotCi1zaXplX3QgSlNNYXA6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAg
IEpTTWFwKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTTWFwKj4oY2VsbCk7Ci0gICAgc2l6ZV90IG1h
cERhdGFTaXplID0gdGhpc09iamVjdC0+bV9tYXBEYXRhLmNhcGFjaXR5SW5CeXRlcygpOwotICAg
IHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgbWFwRGF0YVNpemU7Ci19Ci0KIFN0
cmluZyBKU01hcDo6dG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKikKIHsK
ICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJPYmplY3QiKTsKIH0KIAotdm9pZCBKU01hcDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAganNDYXN0PEpTTWFwKj4oY2Vs
bCktPm1fbWFwRGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpT
TWFwOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3Is
IENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZp
c2l0b3IsIHRva2VuKTsKLSAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLmNvcHlC
YWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOwotfQotCi1ib29sIEpTTWFwOjpoYXMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLmNvbnRhaW5z
KGV4ZWMsIGtleSk7Ci19Ci0KLXNpemVfdCBKU01hcDo6c2l6ZShFeGVjU3RhdGUqIGV4ZWMpCi17
Ci0gICAgcmV0dXJuIG1fbWFwRGF0YS5zaXplKGV4ZWMpOwotfQotCi1KU1ZhbHVlIEpTTWFwOjpn
ZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IG1fbWFwRGF0YS5nZXQoZXhlYywga2V5KTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBKU01hcDo6
c2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAg
bV9tYXBEYXRhLnNldChleGVjLCB0aGlzLCBrZXksIHZhbHVlKTsKLX0KLQotdm9pZCBKU01hcDo6
Y2xlYXIoRXhlY1N0YXRlKikKLXsKLSAgICBtX21hcERhdGEuY2xlYXIoKTsKLX0KLQotYm9vbCBK
U01hcDo6cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCi17Ci0gICAgcmV0dXJu
IG1fbWFwRGF0YS5yZW1vdmUoZXhlYywga2V5KTsKLX0KLQogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU01hcC5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMDggKzI2LDQ5IEBA
CiAjaWZuZGVmIEpTTWFwX2gKICNkZWZpbmUgSlNNYXBfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVj
dGlibGVPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEu
aCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU01h
cEl0ZXJhdG9yOwogCi1jbGFzcyBKU01hcCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7
CitjbGFzcyBKU01hcCA6IHB1YmxpYyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXlWYWx1ZT4+IHsKKyAgICB0eXBlZGVmIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNo
TWFwQnVja2V0RGF0YUtleVZhbHVlPj4gQmFzZTsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIEpTRGVz
dHJ1Y3RpYmxlT2JqZWN0IEJhc2U7Ci0KICAgICBmcmllbmQgY2xhc3MgSlNNYXBJdGVyYXRvcjsK
IAotICAgIC8vIE91ciBtYXJraW5nIGZ1bmN0aW9ucyBleHBlY3QgRW50cnkgdG8gbWFpbnRhaW4g
dGhpcyBsYXlvdXQsIGFuZCBoYXZlIGFsbAotICAgIC8vIGZpZWxkcyBiZSBXcml0ZUJhcnJpZXI8
VW5rbm93bj4KLSAgICBjbGFzcyBFbnRyeSB7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgV3JpdGVC
YXJyaWVyPFVua25vd24+IG1fa2V5OwotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92
YWx1ZTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7Ci0gICAgICAgIH0KLQot
ICAgICAgICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX2tleSk7Ci0gICAgICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmbV92YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleShW
TSYgdm0sIGNvbnN0IEpTQ2VsbCogb3duZXIsIEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0gICAg
ICAgICAgICBtX2tleS5zZXQodm0sIG93bmVyLCBrZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
dm9pZCBzZXRLZXlXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUga2V5KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBtX2tleS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKGtleSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHNldFZhbHVlKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNW
YWx1ZSB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgbV92YWx1ZS5zZXQodm0sIG93bmVy
LCB2YWx1ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAgICAgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsK
LSAgICAgICAgfQotICAgIH07Ci0KLSAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBKU01h
cEl0ZXJhdG9yPiBNYXBEYXRhOwotCiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2Jq
ZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU01hcFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNYXAq
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU01hcCog
Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAg
ICB7CiAgICAgICAgIEpTTWFwKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PEpTTWFwPih2bS5oZWFwKSkgSlNNYXAodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihl
eGVjLCB2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMg
SlNNYXAqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBjcmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcmV0dXJuIG1fbWFwLT5nZXQoZXhlYywga2V5KTsKICAgICB9CiAKLSAgICBib29sIGhh
cyhFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBzaXplX3Qgc2l6ZShFeGVjU3RhdGUqKTsKLSAg
ICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldChFeGVjU3RhdGUqLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSk7Ci0gICAg
dm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtl
eSwgdmFsdWUpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBKU01hcChWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBt
X21hcERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAg
ICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29w
eVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCos
IEV4ZWNTdGF0ZSopOwotCi0gICAgTWFwRGF0YSBtX21hcERhdGE7CiB9OwogCiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkocmV2
aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNYXBJdGVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgdm9pZCBKU01hcEl0ZXJh
dG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZt
KTsKICAgICBtX21hcC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJdGVy
YXRvcih2bSwgbV9tYXAtPmltcGwoKS0+aGVhZCgpKTsKIH0KIAogdm9pZCBKU01hcEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00
Niw2ICs0Nyw3IEBAIHZvaWQgSlNNYXBJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFz
ZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9tYXApOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X2l0ZXIpOwogfQogCiBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNTksOCArNjEsOSBA
QCBKU1ZhbHVlIEpTTWFwSXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTTWFwSXRlcmF0
b3IqIEpTTWFwSXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNs
b25lID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5n
bG9iYWxPYmplY3QoKS0+bWFwSXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9tYXAuZ2V0KCksIG1fa2lu
ZCk7Ci0gICAgY2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CisgICAgYXV0byBjbG9uZSA9IEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhl
Yy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21h
cC5nZXQoKSwgbV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQo
KSk7CiAgICAgcmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU01hcEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNNYXBJdGVyYXRvci5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTTWFwSXRlcmF0b3IgOiBw
dWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+IEhhc2hNYXBCdWNrZXRUeXBlOwogcHVibGljOgogICAgIHR5
cGVkZWYgSlNOb25GaW5hbE9iamVjdCBCYXNlOwogCkBAIC01MSw1MiArNTIsNjIgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0KENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hN
YXBCdWNrZXRUeXBlKiBhZHZhbmNlSXRlcihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgewotICAgICAg
ICBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAo
IW1faXRlcmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIHByZXYg
PSBtX2l0ZXIuZ2V0KCk7CisgICAgICAgIGlmICghcHJldikKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gbV9pdGVyLT5uZXh0
KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgJiYgYnVja2V0LT5kZWxldGVkKCkpIHsKKyAgICAg
ICAgICAgIHByZXYgPSBidWNrZXQ7CisgICAgICAgICAgICBidWNrZXQgPSBidWNrZXQtPm5leHQo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgc2V0SXRl
cmF0b3IoZXhlYy0+dm0oKSwgbnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgfQorICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBidWNrZXQpOyAvLyBX
ZSBrZWVwIG1faXRlciBvbiB0aGUgbGFzdCB2YWx1ZSBzaW5jZSB0aGUgZmlyc3QgdGhpbmcgd2Ug
ZG8gaW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsIG5leHQoKS4KKyAgICAgICAgcmV0dXJuIGJ1Y2tl
dDsKKyAgICB9CisgICAgYm9vbCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUp
CisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYWR2YW5jZUl0ZXIo
ZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgICAgIGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZhbHVlKQotICAgICAgICAgICAgdmFsdWUg
PSBwYWlyLnZhbHVlOworICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPnZhbHVlKCk7CiAgICAg
ICAgIGVsc2UgaWYgKG1fa2luZCA9PSBJdGVyYXRlS2V5KQotICAgICAgICAgICAgdmFsdWUgPSBw
YWlyLmtleTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT5rZXkoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxGcmFtZSwgcGFpci5rZXksIHBh
aXIudmFsdWUpOworICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGV4ZWMsIGJ1Y2tldC0+
a2V5KCksIGJ1Y2tldC0+dmFsdWUoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAot
ICAgIGJvb2wgbmV4dEtleVZhbHVlKEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCisgICAg
Ym9vbCBuZXh0S2V5VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiBrZXksIEpTVmFsdWUm
IHZhbHVlKQogICAgIHsKLSAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1
ZT4gcGFpcjsKLSAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLm5leHQocGFpcikpCisgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYg
KCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAga2V5ID0gcGFp
ci5rZXk7Ci0gICAgICAgIHZhbHVlID0gcGFpci52YWx1ZTsKKyAgICAgICAga2V5ID0gYnVja2V0
LT5rZXkoKTsKKyAgICAgICAgdmFsdWUgPSBidWNrZXQtPnZhbHVlKCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoKCkKLSAgICB7Ci0gICAgICAgIG1faXRl
cmF0b3IuZmluaXNoKCk7Ci0gICAgfQotCiAgICAgSXRlcmF0aW9uS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CiAgICAgSlNWYWx1ZSBpdGVyYXRlZFZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXAuZ2V0KCk7IH0KICAgICBKU01hcEl0ZXJhdG9yKiBjbG9uZShFeGVjU3RhdGUq
KTsKIAotICAgIEpTTWFwOjpNYXBEYXRhOjpJdGVyYXRvckRhdGEqIGl0ZXJhdG9yRGF0YSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gJm1faXRlcmF0b3I7Ci0gICAgfQotCiBwcml2YXRlOgotICAg
IEpTTWFwSXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNNYXAqIGl0ZXJh
dGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisgICAgSlNNYXBJdGVyYXRvcihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCosIEl0ZXJhdGlvbktpbmQga2luZCkKICAgICAg
ICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9pdGVyYXRvcihpdGVyYXRlZE9i
amVjdC0+bV9tYXBEYXRhLmNyZWF0ZUl0ZXJhdG9yRGF0YSh0aGlzKSkKICAgICAgICAgLCBtX2tp
bmQoa2luZCkKKyAgICB7IH0KKworICAgIHZvaWQgc2V0SXRlcmF0b3IoVk0mIHZtLCBIYXNoTWFw
QnVja2V0VHlwZSogYnVja2V0KQogICAgIHsKKyAgICAgICAgbV9pdGVyLnNldE1heUJlTnVsbCh2
bSwgdGhpcywgYnVja2V0KTsKICAgICB9CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
bmlzaENyZWF0aW9uKFZNJiwgSlNNYXAqKTsKQEAgLTEwNCw3ICsxMTUsNyBAQCBwcml2YXRlOgog
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAog
ICAgIFdyaXRlQmFycmllcjxKU01hcD4gbV9tYXA7Ci0gICAgSlNNYXA6Ok1hcERhdGE6Okl0ZXJh
dG9yRGF0YSBtX2l0ZXJhdG9yOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4g
bV9pdGVyOwogICAgIEl0ZXJhdGlvbktpbmQgbV9raW5kOwogfTsKIFNUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRShKU01hcEl0ZXJhdG9yKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5jcHAJKHJldmlzaW9uIDIw
NTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTEgKzU1LDE0IEBAIEpTTW9kdWxlTG9hZGVyOjpKU01v
ZHVsZUxvYWRlcihWTSYgdm0sIFMKIHsKIH0KIAotdm9pZCBKU01vZHVsZUxvYWRlcjo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQordm9pZCBKU01v
ZHVsZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBwdXREaXJlY3Qodm0sIElkZW50
aWZpZXI6OmZyb21TdHJpbmcoJnZtLCAicmVnaXN0cnkiKSwgSlNNYXA6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSkpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCB2bSwg
Z2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoIXNjb3Bl
LmV4Y2VwdGlvbigpKTsKKyAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmco
JnZtLCAicmVnaXN0cnkiKSwgbWFwKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCShyZXZp
c2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxv
YWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTAgQEAgcHVibGljOgogICAgICAg
ICBSZWFkeSA9IDYsCiAgICAgfTsKIAotICAgIHN0YXRpYyBKU01vZHVsZUxvYWRlciogY3JlYXRl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgc3RhdGljIEpTTW9kdWxlTG9hZGVyKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKICAgICAgICAgSlNNb2R1bGVMb2FkZXIqIG9iamVjdCA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTTW9kdWxlTG9hZGVyPih2bS5oZWFwKSkgSlNNb2R1bGVMb2FkZXIodm0s
IHN0cnVjdHVyZSk7Ci0gICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24odm0sIGdsb2JhbE9i
amVjdCk7CisgICAgICAgIG9iamVjdC0+ZmluaXNoQ3JlYXRpb24oZXhlYywgdm0sIGdsb2JhbE9i
amVjdCk7CiAgICAgICAgIHJldHVybiBvYmplY3Q7CiAgICAgfQogCkBAIC03Nyw3ICs3Nyw3IEBA
IHB1YmxpYzoKICAgICBKU1ZhbHVlIGV2YWx1YXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBK
U1ZhbHVlIG1vZHVsZVJlY29yZCwgSlNWYWx1ZSBpbml0aWF0b3IpOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBm
aW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CiB9OwogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQsMTQgKzQ0LDE3IEBAIHZvaWQgSlNNb2R1bGVSZWNvcmQ6OmRlc3Ryb3koSlNDZWxsKiBjZWwK
ICAgICB0aGlzT2JqZWN0LT5KU01vZHVsZVJlY29yZDo6fkpTTW9kdWxlUmVjb3JkKCk7CiB9CiAK
LXZvaWQgSlNNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3ZvaWQgSlNNb2R1
bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7
CiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKCZ2bSwgQVNDSUlMaXRl
cmFsKCJyZWdpc3RyeUVudHJ5IikpLCBqc1VuZGVmaW5lZCgpKTsKICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImV2YWx1YXRlZCIpKSwg
anNCb29sZWFuKGZhbHNlKSk7CiAKLSAgICBtX2RlcGVuZGVuY2llc01hcC5zZXQodm0sIHRoaXMs
IEpTTWFwOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCgpLT5tYXBTdHJ1Y3R1cmUoKSkpOworICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU01hcCogbWFwID0g
SlNNYXA6OmNyZWF0ZShleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KCktPm1hcFN0cnVjdHVyZSgpKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAgIG1fZGVwZW5kZW5j
aWVzTWFwLnNldCh2bSwgdGhpcywgbWFwKTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6
OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImRlcGVuZGVuY2llc01hcCIpKSwgbV9kZXBl
bmRlbmNpZXNNYXAuZ2V0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU01vZHVsZVJlY29yZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDEwICs4NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNNb2R1bGVSZWNvcmQq
IGNyZWF0ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBt
b2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBs
ZXhpY2FsVmFyaWFibGVzKQorICAgIHN0YXRpYyBKU01vZHVsZVJlY29yZCogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmll
ciYgbW9kdWxlS2V5LCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiBkZWNsYXJlZFZhcmlhYmxlcywgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVu
dCYgbGV4aWNhbFZhcmlhYmxlcykKICAgICB7CiAgICAgICAgIEpTTW9kdWxlUmVjb3JkKiBpbnN0
YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTTW9kdWxlUmVjb3JkPih2bS5oZWFw
KSkgSlNNb2R1bGVSZWNvcmQodm0sIHN0cnVjdHVyZSwgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBk
ZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcyk7Ci0gICAgICAgIGluc3RhbmNlLT5m
aW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVj
LCB2bSk7CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKQEAgLTE1Miw3ICsxNTIs
NyBAQCBwcml2YXRlOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
Jik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBWTSYpOwogCiAgICAgSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QqIGdldE1vZHVsZU5hbWVzcGFjZShFeGVjU3RhdGUqKTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmNwcAkocmV2aXNpb24gMjA1
NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNiw3MCArMjYsMTUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJK
U1NldC5oIgogCi0jaW5jbHVkZSAiQ29waWVkQmxvY2tJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlND
SlNWYWx1ZUlubGluZXMuaCIKLSNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAi
TWFwRGF0YUlubGluZXMuaCIKLSNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKLSNpbmNs
dWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIAogY29uc3QgQ2xhc3NJbmZvIEpTU2V0OjpzX2luZm8gPSB7ICJTZXQiLCAm
QmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTU2V0KSB9OwogCi12b2lkIEpT
U2V0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBKU1NldCogdGhpc09iamVjdCA9IGpz
Q2FzdDxKU1NldCo+KGNlbGwpOwotICAgIHRoaXNPYmplY3QtPkpTU2V0Ojp+SlNTZXQoKTsKLX0K
LQogU3RyaW5nIEpTU2V0Ojp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUq
KQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIk9iamVjdCIpOwogfQogCi1zaXplX3QgSlNT
ZXQ6OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQotewotICAgIEpTU2V0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgc2l6ZV90IHNldERhdGFTaXplID0gdGhpc09i
amVjdC0+bV9zZXREYXRhLmNhcGFjaXR5SW5CeXRlcygpOwotICAgIHJldHVybiBCYXNlOjplc3Rp
bWF0ZWRTaXplKGNlbGwpICsgc2V0RGF0YVNpemU7Ci19Ci0KLXZvaWQgSlNTZXQ6OnZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotICAgIGpzQ2FzdDxKU1NldCo+KGNlbGwpLT5t
X3NldERhdGEudmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLX0KLQotdm9pZCBKU1NldDo6
Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5
VG9rZW4gdG9rZW4pCi17Ci0gICAgQmFzZTo6Y29weUJhY2tpbmdTdG9yZShjZWxsLCB2aXNpdG9y
LCB0b2tlbik7Ci0gICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS5jb3B5QmFja2lu
Z1N0b3JlKHZpc2l0b3IsIHRva2VuKTsKLX0KLQotYm9vbCBKU1NldDo6aGFzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICByZXR1cm4gbV9zZXREYXRhLmNvbnRhaW5zKGV4
ZWMsIHZhbHVlKTsKLX0KLQotc2l6ZV90IEpTU2V0OjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gbV9zZXREYXRhLnNpemUoZXhlYyk7Ci19Ci0KLXZvaWQgSlNTZXQ6OmFkZChF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgbV9zZXREYXRhLnNldChleGVj
LCB0aGlzLCB2YWx1ZSwgdmFsdWUpOwotfQotCi12b2lkIEpTU2V0OjpjbGVhcihFeGVjU3RhdGUq
KQotewotICAgIG1fc2V0RGF0YS5jbGVhcigpOwotfQotCi1ib29sIEpTU2V0OjpyZW1vdmUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBtX3NldERhdGEucmVt
b3ZlKGV4ZWMsIHZhbHVlKTsKLX0KLQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NldC5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxMDMgKzI2LDQ1IEBACiAjaWZuZGVmIEpT
U2V0X2gKICNkZWZpbmUgSlNTZXRfaAogCi0jaW5jbHVkZSAiSlNEZXN0cnVjdGlibGVPYmplY3Qu
aCIKICNpbmNsdWRlICJKU09iamVjdC5oIgotI2luY2x1ZGUgIk1hcERhdGEuaCIKKyNpbmNsdWRl
ICJNYXBCYXNlLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1NldEl0ZXJhdG9yOwog
Ci1jbGFzcyBKU1NldCA6IHB1YmxpYyBKU0Rlc3RydWN0aWJsZU9iamVjdCB7CitjbGFzcyBKU1Nl
dCA6IHB1YmxpYyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PiB7
CisgICAgdHlwZWRlZiBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+
PiBCYXNlOwogcHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsK
IAogICAgIGZyaWVuZCBjbGFzcyBKU1NldEl0ZXJhdG9yOwogCi0gICAgLy8gT3VyIG1hcmtpbmcg
ZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUg
YWxsCi0gICAgLy8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgotICAgIGNsYXNzIEVu
dHJ5IHsKLSAgICBwcml2YXRlOgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7
Ci0KLSAgICBwdWJsaWM6Ci0gICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYga2V5
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9
Ci0KLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tleTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICAgICAgewotICAg
ICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgc2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mLCBjb25zdCBKU0NlbGwqLCBK
U1ZhbHVlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGNsZWFyKCkKLSAg
ICAgICAgewotICAgICAgICAgICAgbV9rZXkuY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0K
LSAgICB0eXBlZGVmIE1hcERhdGFJbXBsPEVudHJ5LCBKU1NldEl0ZXJhdG9yPiBTZXREYXRhOwot
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBn
bG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2Jh
bE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhKU1NldFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwg
aW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlKQorICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEpTU2V0KiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTU2V0Pih2bS5oZWFwKSkgSlNT
ZXQodm0sIHN0cnVjdHVyZSk7Ci0gICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbih2bSk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSk7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBzdGF0aWMgSlNTZXQqIGNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
ZGQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKICAgICB7Ci0gICAgICAgIHJldHVybiBj
cmVhdGUoZXhlYy0+dm0oKSwgc3RydWN0dXJlKTsKKyAgICAgICAgbV9tYXAtPmFkZChleGVjLCBr
ZXkpOwogICAgIH0KIAotICAgIGJvb2wgaGFzKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIHNp
emVfdCBzaXplKEV4ZWNTdGF0ZSopOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWRkKEV4
ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIHZvaWQgY2xlYXIoRXhlY1N0YXRlKik7Ci0gICAgYm9v
bCByZW1vdmUoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0KIHByaXZhdGU6CiAgICAgSlNTZXQoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
Ci0gICAgICAgICwgbV9zZXREYXRhKHZtLCB0aGlzKQogICAgIHsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwotICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6
ZShKU0NlbGwqKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7Ci0gICAgc3RhdGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5
VmlzaXRvciYsIENvcHlUb2tlbik7CiAgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29u
c3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsKLQotICAgIFNldERhdGEgbV9zZXREYXRhOwogfTsK
IAogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVy
YXRvci5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIHZv
aWQgSlNTZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHYKIHsKICAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAgICAgbV9zZXQuc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7
CisgICAgc2V0SXRlcmF0b3Iodm0sIG1fc2V0LT5pbXBsKCktPmhlYWQoKSk7CiB9CiAKIHZvaWQg
SlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQpAQCAtNDYsNiArNDcsNyBAQCB2b2lkIEpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2V0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9pdGVyKTsKIH0KIAogSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQ
YWlyKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKQEAg
LTU5LDggKzYxLDkgQEAgSlNWYWx1ZSBKU1NldEl0ZXJhdG9yOjpjcmVhdGVQYWlyKENhbGxGcgog
CiBKU1NldEl0ZXJhdG9yKiBKU1NldEl0ZXJhdG9yOjpjbG9uZShFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZShleGVjLT52bSgpLCBleGVj
LT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPnNldEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fc2V0
LmdldCgpLCBtX2tpbmQpOwotICAgIGNsb25lLT5tX2l0ZXJhdG9yID0gbV9pdGVyYXRvcjsKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIGF1dG8gY2xvbmUgPSBKU1NldEl0ZXJhdG9yOjpj
cmVhdGUodm0sIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1
Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1fa2luZCk7CisgICAgY2xvbmUtPnNldEl0ZXJhdG9yKHZt
LCBtX2l0ZXIuZ2V0KCkpOwogICAgIHJldHVybiBjbG9uZTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0SXRlcmF0b3IuaAkocmV2aXNpb24gMjA1NDky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM1LDYgKzM1LDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU1Nl
dEl0ZXJhdG9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1h
cEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4gSGFzaE1hcEJ1Y2tldFR5cGU7CiBwdWJsaWM6
CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKQEAgLTUyLDQ2ICs1Myw1OSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5l
eHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJ
TkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7
Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAg
ICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0VHlw
ZSogcHJldiA9IG1faXRlci5nZXQoKTsKKyAgICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2l0
ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkg
eworICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tl
dC0+bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAg
ICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tl
dCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0
aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGwgbmV4dCgpLgorICAgICAgICByZXR1
cm4gYnVja2V0OworICAgIH0KKworICAgIGJvb2wgbmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGFk
dmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgICAgICBpZiAobV9raW5kID09IEl0ZXJhdGVWYWx1ZSB8fCBtX2tpbmQg
PT0gSXRlcmF0ZUtleSkKLSAgICAgICAgICAgIHZhbHVlID0gcGFpci5rZXk7CisgICAgICAgICAg
ICB2YWx1ZSA9IGJ1Y2tldC0+a2V5KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbHVl
ID0gY3JlYXRlUGFpcihjYWxsRnJhbWUsIHBhaXIua2V5LCBwYWlyLmtleSk7CisgICAgICAgICAg
ICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT5rZXkoKSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIHZvaWQgZmluaXNoKCkKLSAgICB7
Ci0gICAgICAgIG1faXRlcmF0b3IuZmluaXNoKCk7Ci0gICAgfQotCiAgICAgSXRlcmF0aW9uS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgSlNWYWx1ZSBpdGVyYXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuZ2V0KCk7IH0KICAgICBKU1NldEl0ZXJhdG9yKiBj
bG9uZShFeGVjU3RhdGUqKTsKIAotICAgIEpTU2V0OjpTZXREYXRhOjpJdGVyYXRvckRhdGEqIGl0
ZXJhdG9yRGF0YSgpCi0gICAgewotICAgICAgICByZXR1cm4gJm1faXRlcmF0b3I7Ci0gICAgfQot
CiBwcml2YXRlOgotICAgIEpTU2V0SXRlcmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgSlNTZXQqIGl0ZXJhdGVkT2JqZWN0LCBJdGVyYXRpb25LaW5kIGtpbmQpCisgICAgSlNTZXRJ
dGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCosIEl0ZXJhdGlvbktp
bmQga2luZCkKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCi0gICAgICAgICwgbV9pdGVy
YXRvcihpdGVyYXRlZE9iamVjdC0+bV9zZXREYXRhLmNyZWF0ZUl0ZXJhdG9yRGF0YSh0aGlzKSkK
ICAgICAgICAgLCBtX2tpbmQoa2luZCkKICAgICB7CiAgICAgfQogCisgICAgdm9pZCBzZXRJdGVy
YXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCisgICAgeworICAgICAgICBt
X2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQpOyAKKyAgICB9CisKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNTZXQqKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBKU1ZhbHVlIGNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiwgSlNWYWx1ZSwgSlNW
YWx1ZSk7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRv
ciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpTU2V0PiBtX3NldDsKLSAgICBKU1NldDo6U2V0RGF0
YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNr
ZXRUeXBlPiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTU2V0SXRlcmF0b3IpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04
Miw4ICs4MiwxMCBAQCBlbnVtIEpTVHlwZSA6IHVpbnQ4X3QgewogICAgIE1vZHVsZUVudmlyb25t
ZW50VHlwZSwKICAgICBSZWdFeHBPYmplY3RUeXBlLAogICAgIFByb3h5T2JqZWN0VHlwZSwKKyAg
ICBKU01hcFR5cGUsCisgICAgSlNTZXRUeXBlLAogCi0gICAgTGFzdEpTQ09iamVjdFR5cGUgPSBQ
cm94eU9iamVjdFR5cGUsCisgICAgTGFzdEpTQ09iamVjdFR5cGUgPSBKU1NldFR5cGUsCiB9Owog
CiBDT01QSUxFX0FTU0VSVChzaXplb2YoSlNUeXBlKSA9PSBzaXplb2YodWludDhfdCksIHNpemVv
Zl9qc3R5cGVfaXNfb25lX2J5dGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTWFwQmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNYXBCYXNlLmgiCisKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0
VHlwZT4KK3ZvaWQgTWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT46OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBNYXBCYXNlKiB0aGlzT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8TWFwQmFzZSo+KGNlbGwpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fbWFwKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBlPgorc2l6
ZV90IE1hcEJhc2U8SGFzaE1hcEJ1Y2tldFR5cGU+Ojplc3RpbWF0ZWRTaXplKEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICByZXR1cm4gQmFzZTo6ZXN0aW1hdGVkU2l6ZShjZWxsKSArIHN0YXRpY19jYXN0
PE1hcEJhc2UqPihjZWxsKS0+bV9tYXAtPmFwcHJveGltYXRlU2l6ZSgpOworfQorCit0ZW1wbGF0
ZSBjbGFzcyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
OwordGVtcGxhdGUgY2xhc3MgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRh
S2V5Pj47CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcEJhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hcEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiSGFzaE1hcEltcGwuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBlPgorY2xhc3Mg
TWFwQmFzZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hNYXBJ
bXBsPEhhc2hNYXBCdWNrZXRUeXBlPiBIYXNoTWFwSW1wbFR5cGU7CisgICAgdHlwZWRlZiBKU05v
bkZpbmFsT2JqZWN0IEJhc2U7CitwdWJsaWM6CisKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXRU
eXBlIEJ1Y2tldFR5cGU7CisKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBzaXplKEV4ZWNTdGF0
ZSopCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnNpemUoKTsKKyAgICB9CisKKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAtPmhhcyhleGVjLCBrZXkpOworICAgIH0KKworICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBt
X21hcC0+Y2xlYXIoZXhlYyk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBib29sIHJlbW92
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
bWFwLT5yZW1vdmUoZXhlYywga2V5KTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hN
YXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCB1
aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLT5maW5kQnVja2V0KGV4
ZWMsIGtleSwgaGFzaCk7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkhh
c2hNYXBJbXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoTWFwQmFz
ZTxIYXNoTWFwQnVja2V0VHlwZT4sIG1fbWFwKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEhhc2hNYXBJbXBsVHlwZSogaW1wbCgpIHsgcmV0dXJuIG1fbWFwLmdldCgpOyB9CisKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAg
ICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEhhc2hNYXBJbXBsVHlwZSogaW1wbCA9IEhhc2hN
YXBJbXBsVHlwZTo6Y3JlYXRlKGV4ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3Bl
LmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9tYXAuc2V0KHZt
LCB0aGlzLCBpbXBsKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBNYXBCYXNlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQorICAg
IHsKKyAgICB9CisKKyAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7Cisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCisg
ICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBJbXBsVHlwZT4gbV9tYXA7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsOSArNjEs
MTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxs
ZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogbWFwU3RydWN0dXJlID0gSW50
ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFy
Z2V0KCksIGdsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgSlNNYXAqIG1hcCA9IEpT
TWFwOjpjcmVhdGUoZXhlYywgdm0sIG1hcFN0cnVjdHVyZSk7CisgICAgaWYgKFVOTElLRUxZKHNj
b3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KCkpOwotICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIG1hcFN0cnVjdHVyZSk7
CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVy
YWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KG1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJdGVy
YXRvcgogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJh
bWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0
b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Ci0gICAgaXRlcmF0b3It
PmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1
bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcFByb3RvdHlwZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAkocmV2aXNp
b24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTQgKzY4LDEzIEBAIHZvaWQgTWFwUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9V
VF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBtYXBQcm90b0Z1bmNDbGVhciwg
RG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIG1hcFByb3RvRnVuY0RlbGV0ZSwgRG9u
dEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPmdldCwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7Ci0gICAg
SlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+
aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJ
TlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBt
YXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldEludHJpbnNpYyk7CisgICAgSlND
X05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPmhhcywgbWFwUHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSwgSlNNYXBIYXNJbnRyaW5z
aWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPnNldCwgbWFwUHJvdG9GdW5jU2V0LCBEb250RW51bSwgMik7CiAgICAgSlNDX05B
VElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRp
bk5hbWVzKCkua2V5c1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jS2V5cywgRG9udEVudW0sIDAp
OwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLnZhbHVlc1B1YmxpY05hbWUoKSwgbWFwUHJvdG9GdW5jVmFs
dWVzLCBEb250RW51bSwgMCk7CiAKLSAgICAvLyBQcml2YXRlIGdldCAvIHNldCBvcGVyYXRpb25z
LgotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5
TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIG1hcFByb3RvRnVuY0dldCwg
RG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5nZXRQcml2YXRlTmFt
ZSgpLCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxLCBKU01hcEdldEludHJpbnNpYyk7CiAg
ICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1l
cy0+YnVpbHRpbk5hbWVzKCkuc2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jU2V0LCBEb250
RW51bSwgMik7CiAKICAgICBKU0Z1bmN0aW9uKiBlbnRyaWVzID0gSlNGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIDAsIHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmVu
dHJpZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIG1hcFByb3RvRnVuY0VudHJpZXMpOwpAQCAtOTEs
MTYgKzkwLDIxIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTTWFwKiBnZXRNYXAoQ2FsbEYKICAg
ICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhS
T1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNPYmplY3QoKSkgeworICAgIGlm
IChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAgICAgICB0aHJvd1ZNRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihjYWxsRnJhbWUsIHRoaXNW
YWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgSlNNYXAqIG1hcCA9
IGpzRHluYW1pY0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwotICAgIGlmICghbWFwKSB7Ci0gICAg
ICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTWFwIG9w
ZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLSAgICByZXR1cm4gbWFwOworCisgICAgaWYgKExJS0VMWSh0aGlzVmFsdWUu
YXNDZWxsKCktPnR5cGUoKSA9PSBKU01hcFR5cGUpKQorICAgICAgICByZXR1cm4ganNDYXN0PEpT
TWFwKj4odGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBB
U0NJSUxpdGVyYWwoIk1hcCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1NYXAgb2JqZWN0IikpOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHBy
aXZhdGVGdW5jSXNNYXAoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgdmFsdWUgPSBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
Qm9vbGVhbih2YWx1ZS5pc0NlbGwoKSAmJiB2YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpTTWFw
VHlwZSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuY0Ns
ZWFyKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtMTg3LDExICsxOTEsNiBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hcFByb3RvRnVuCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU01hcEl0ZXJhdG9yOjpjcmVhdGUodm0sIGNhbGxGcmFtZS0+Y2FsbGVlKCktPmdsb2JhbE9i
amVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCB0aGlzT2JqLCBJdGVyYXRlS2V5KSk7CiB9
CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oanNEeW5h
bWljQ2FzdDxKU01hcCo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKSkpOwotfQotCiBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jTWFwSXRlcmF0b3IoRXhlY1N0YXRl
KiBleGVjKQogewogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpKTsKQEAgLTIwNCwxMyArMjAzLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmMKICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcEl0
ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpKTsKICAgICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRv
ciA9IGpzQ2FzdDxKU01hcEl0ZXJhdG9yKj4oZXhlYy0+dGhpc1ZhbHVlKCkpOwogICAgIEpTVmFs
dWUga2V5LCB2YWx1ZTsKLSAgICBpZiAoaXRlcmF0b3ItPm5leHRLZXlWYWx1ZShrZXksIHZhbHVl
KSkgeworICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGV4ZWMsIGtleSwgdmFsdWUpKSB7
CiAgICAgICAgIEpTQXJyYXkqIHJlc3VsdEFycmF5ID0ganNDYXN0PEpTQXJyYXkqPihleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCAwLCBrZXkpOwogICAgICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhl
YywgMSwgdmFsdWUpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihm
YWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHJldmlzaW9u
IDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3Jp
cHRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MSwyMiArMTkxLDYgQEAgdm9pZCBQcm9wZXJ0
eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAgIG1fYXR0cmlidXRlcyAmPSB+UmVhZE9u
bHk7CiB9CiAKLS8vIFNlZSBFUzUuMSA5LjEyCi1ib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgYSwgSlNWYWx1ZSBiKQotewotICAgIGlmICghYS5pc051bWJlcigpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgYSwgYik7Ci0gICAgaWYgKCFi
LmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkb3VibGUgeCA9IGEuYXNO
dW1iZXIoKTsKLSAgICBkb3VibGUgeSA9IGIuYXNOdW1iZXIoKTsKLSAgICBib29sIHhJc05hTiA9
IHN0ZDo6aXNuYW4oeCk7Ci0gICAgYm9vbCB5SXNOYU4gPSBzdGQ6OmlzbmFuKHkpOwotICAgIGlm
ICh4SXNOYU4gfHwgeUlzTmFOKQotICAgICAgICByZXR1cm4geElzTmFOICYmIHlJc05hTjsKLSAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSA9PSBiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHkpOwotfQotCiBib29sIFByb3BlcnR5RGVzY3JpcHRvcjo6ZXF1YWxUbyhFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYg
KG90aGVyLm1fdmFsdWUuaXNFbXB0eSgpICE9IG1fdmFsdWUuaXNFbXB0eSgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAko
cmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIGNsYXNzIEdldHRlclNldHRlcjsKIAotLy8gU2VlIEVTNS4xIDkuMTIKLWJvb2wg
c2FtZVZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUsIEpTVmFsdWUpOwotCiBjbGFzcyBQcm9wZXJ0
eURlc2NyaXB0b3IgewogcHVibGljOgogICAgIFByb3BlcnR5RGVzY3JpcHRvcigpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25z
dHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDkgKzYyLDExIEBAIHN0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnMKIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSBhc0ludGVybmFsRnVuY3Rpb24oZXhlYy0+Y2FsbGVlKCkpLT5nbG9iYWxPYmpl
Y3QoKTsKICAgICBTdHJ1Y3R1cmUqIHNldFN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNy
ZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmpl
Y3QtPnNldFN0cnVjdHVyZSgpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShKU1ZhbHVlKCkpOworICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKGV4ZWMs
IHZtLCBzZXRTdHJ1Y3R1cmUpOworICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLSAgICBKU1NldCog
c2V0ID0gSlNTZXQ6OmNyZWF0ZShleGVjLCBzZXRTdHJ1Y3R1cmUpOwogICAgIEpTVmFsdWUgaXRl
cmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBpZiAoaXRlcmFibGUuaXNVbmRlZmluZWRP
ck51bGwoKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzZXQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90
eXBlLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3IKIAogICAgIGlmIChp
dGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZh
bHNlKSk7Ci0gICAgaXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY3JlYXRlSXRlcmF0b3JSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0
cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldFByb3Rv
dHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsNyArNjgsNyBA
QCB2b2lkIFNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtCiAgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YWRkLCBzZXRQ
cm90b0Z1bmNBZGQsIERvbnRFbnVtLCAxKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5jbGVhciwgc2V0UHJvdG9GdW5jQ2xlYXIs
IERvbnRFbnVtLCAwKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5kZWxldGVLZXl3b3JkLCBzZXRQcm90b0Z1bmNEZWxldGUsIERv
bnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOworICAg
IEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9w
ZXJ0eU5hbWVzLT5oYXMsIHNldFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEsIEpTU2V0SGFzSW50
cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5lbnRyaWVzUHVibGljTmFtZSgpLCBzZXRQcm90
b0Z1bmNFbnRyaWVzLCBEb250RW51bSwgMCk7CiAKICAgICBKU0Z1bmN0aW9uKiB2YWx1ZXMgPSBK
U0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1lcy0+
YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLnN0cmluZygpLCBzZXRQcm90b0Z1bmNW
YWx1ZXMpOwpAQCAtODUsMTYgKzg1LDE0IEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIEpTU2V0KiBn
ZXRTZXQoQ2FsbEYKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgYXV0byBzY29w
ZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCi0gICAgaWYgKCF0aGlzVmFsdWUuaXNPYmpl
Y3QoKSkgeworICAgIGlmIChVTkxJS0VMWSghdGhpc1ZhbHVlLmlzQ2VsbCgpKSkgewogICAgICAg
ICB0aHJvd1ZNRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgY3JlYXRlTm90QW5PYmplY3RFcnJvcihj
YWxsRnJhbWUsIHRoaXNWYWx1ZSkpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0g
ICAgSlNTZXQqIHNldCA9IGpzRHluYW1pY0Nhc3Q8SlNTZXQqPih0aGlzVmFsdWUpOwotICAgIGlm
ICghc2V0KSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJ
TGl0ZXJhbCgiU2V0IG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLVNldCBvYmplY3QiKSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICByZXR1cm4gc2V0OworICAgIGlmIChMSUtF
TFkodGhpc1ZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNTZXRUeXBlKSkKKyAgICAgICAgcmV0
dXJuIGpzQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7CisgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZy
YW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0
IG9iamVjdCIpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzZXRQcm90b0Z1bmNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xODQs
NyArMTgyLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuYwogICAg
ICAgICByZXN1bHRBcnJheS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgMCwgcmVzdWx0KTsKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKTsKICAgICB9Ci0gICAg
aXRlcmF0b3ItPmZpbmlzaCgpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFu
KHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2
aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSAiSlNJbnRlcm5hbFByb21p
c2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVk
ZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKICNpbmNsdWRlICJKU1Byb21pc2VEZWZl
cnJlZC5oIgogI2luY2x1ZGUgIkpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIgogI2luY2x1ZGUg
IkpTVGVtcGxhdGVSZWdpc3RyeUtleS5oIgpAQCAtMjUzLDYgKzI1NCwxMCBAQCBWTTo6Vk0oVk1U
eXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQog
ICAgIHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgV2ViQXNzZW1ibHlD
b2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICNlbmRpZgor
ICAgIGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OworICAgIGhhc2hNYXBCdWNrZXRNYXBTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CisgICAgaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5zZXQo
KnRoaXMsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAKICAgICBpdGVyYXRp
b25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3JlYXRlKCp0aGlzLCBKU0Zp
bmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpLCAxKSkpOwogICAg
IG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMsIE5hdGl2ZVN0ZEZ1bmN0
aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsNiArMzM0LDEw
IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiBldmFsQ29kZUJsb2NrU3RydWN0dXJl
OwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYkFzc2VtYmx5Q29kZUJsb2NrU3RydWN0dXJlOworICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBCdWNrZXRTZXRTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0
cnVjdHVyZT4gaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJl
PiBoYXNoTWFwSW1wbFNldFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFw
SW1wbE1hcFN0cnVjdHVyZTsKIAogICAgIFN0cm9uZzxKU0NlbGw+IGl0ZXJhdGlvblRlcm1pbmF0
b3I7CiAgICAgU3Ryb25nPEpTQ2VsbD4gZW1wdHlQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yOwpJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIwNTQ5NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDktMDYgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBKU01hcCBhbmQgSlNTZXQgZmFzdGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA5ODkKKworICAgICAg
ICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBJIG1hZGUgc19mbGFnQ291bnQg
cHVibGljIHNpbmNlIEpTQydzIEpJVHMgbm93IHVzZSB0aGlzIGZpZWxkLgorCisgICAgICAgICog
d3RmL3RleHQvU3RyaW5nSW1wbC5oOgorCiAyMDE2LTA5LTA2ICBEYW5pZWwgQmF0ZXMgIDxkYWJh
dGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgRVhURVJOX0MgZnJvbSBXVEYKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvV1RG
L3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw5IEBA
IHByaXZhdGU6CiAgICAgfTsKIAogICAgIC8vIFRoZSBib3R0b20gNiBiaXRzIGluIHRoZSBoYXNo
IGFyZSBmbGFncy4KK3B1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19mbGFnQ291
bnQgPSA2OworcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19mbGFnTWFzayA9
ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAxOwogICAgIENPTVBJTEVfQVNTRVJUKHNfZmxhZ0NvdW50
IDw9IFN0cmluZ0hhc2hlcjo6ZmxhZ0NvdW50LCBTdHJpbmdIYXNoZXJfcmVzZXJ2ZXNfZW5vdWdo
X2JpdHNfZm9yX1N0cmluZ0ltcGxfZmxhZ3MpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X2ZsYWdTdHJpbmdLaW5kQ291bnQgPSA0OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NDky
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTYtMDktMDYgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAg
ICAgICAgTWFrZSBKU01hcCBhbmQgSlNTZXQgZmFzdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBG
aWxpcCBQaXpsby4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSGFzaE1h
cEltcGwuaDogQWRkZWQuCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBC
YXNlLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZURlc2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorCiAyMDE2
LTA5LTA2ICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXgg
dGhlIEFwcGxlLWludGVybmFsIGJ1aWxkIGZvbGxvd2luZyA8aHR0cHM6Ly90cmFjLndlYmtpdC5v
cmcvY2hhbmdlc2V0LzIwNTQ4OD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFk
ZXJzL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX0hhc2hNYXBJ
bXBsX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0RfSGFzaE1hcEltcGxfaAorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0hhc2hNYXBJbXBsLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0Zv
cndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFwQmFzZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIFdlYkNvcmVfRldEX01hcEJhc2Vf
aAorI2RlZmluZSBXZWJDb3JlX0ZXRF9NYXBCYXNlX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9NYXBCYXNlLmg+CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM2OCw3ICsxMzY4LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUg
Q2xvbmVTZXJpYWxpemVyOgogICAgICAgICAgICAgY2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5
OiB7CiAgICAgICAgICAgICAgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBtYXBJdGVyYXRv
clN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+bmV4dEtleVZhbHVlKG1fZXhlYywga2V5LCB2
YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0
KCk7CiAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0
YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNN
YXAqPihvYmplY3QpKTsKQEAgLTI1NDUsNyArMjU0NSw5IEBAIERlc2VyaWFsaXphdGlvblJlc3Vs
dCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAgbWFwT2JqZWN0U3RhcnRTdGF0ZTogewogICAg
ICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1
cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwg
U3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3Jl
YXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKG1fZXhlYywgbV9leGVjLT52bSgpLCBt
X2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZ
KG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAg
ICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChtYXApOwogICAgICAgICAgICAgb3V0cHV0T2Jq
ZWN0U3RhY2suYXBwZW5kKG1hcCk7CiAgICAgICAgICAgICBtYXBTdGFjay5hcHBlbmQobWFwKTsK
QEAgLTI1NzQsNyArMjU3Niw5IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFs
aXplcjoKICAgICAgICAgc2V0T2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgaWYgKG91
dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vy
cm9yKTsKLSAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYy0+dm0o
KSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIEpTU2V0KiBz
ZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYywgbV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+
c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2dj
QnVmZmVyLmFwcGVuZChzZXQpOwogICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5k
KHNldCk7CiAgICAgICAgICAgICBzZXRTdGFjay5hcHBlbmQoc2V0KTsK
</data>
<flag name="commit-queue"
          id="311445"
          type_id="3"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288041</attachid>
            <date>2016-09-06 13:43:53 -0700</date>
            <delta_ts>2016-09-06 15:52:05 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>181910</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDU0OTUpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU1IEBACisyMDE2LTA5LTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZGVuc2Ut
c2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGJlbmNoKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRoLWFkZGl0aW9ucy5qczogQWRkZWQuCisgICAgICAg
IChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvbGFyZ2Ut
bWFwLWl0ZXJhdGlvbi13aXRoLW11dGF0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6Cisg
ICAgICAgIChmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0
aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAq
IG1pY3JvYmVuY2htYXJrcy9tYXAtZ2V0LWdldC1jc2UuanM6IEFkZGVkLgorICAgICAgICAoYmFy
KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL21hcC1oYXMtZ2V0
LWNzZS1vcHBvcnR1bml0eS5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9v
KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvc3BhcnNlLXNldC5qczogQWRkZWQuCisgICAg
ICAgIChiZW5jaCk6CisgICAgICAgICogc3RyZXNzL21hcC1jc2UtY29ycmVjdG5lc3MuanM6IEFk
ZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3RIYXMpOgorICAgICAgICAodGVz
dEdldCk6CisgICAgICAgIChmb28pOgorICAgICAgICAqIHN0cmVzcy9tYXAtaXRlcmF0aW9uLmpz
OiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0MSk6CisgICAgICAgICh0
ZXN0Mik6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAgICh0ZXN0NCk6CisgICAgICAgICh0ZXN0
NSk6CisgICAgICAgICh0ZXN0Nik6CisgICAgICAgICh0ZXN0Nyk6CisgICAgICAgICh0ZXN0OCk6
CisgICAgICAgICh0ZXN0OSk6CisgICAgICAgICh0ZXN0MTApOgorICAgICAgICAodGVzdDExKToK
KyAgICAgICAgKHRlc3QxMik6CisgICAgICAgICh0ZXN0MTMpOgorICAgICAgICAodGVzdDE0KToK
KyAgICAgICAgKHRlc3QxNSk6CisgICAgICAgICh0ZXN0MTYpOgorICAgICAgICAodGVzdDE3KToK
KyAgICAgICAgKHRlc3QxOCk6CisKIDIwMTYtMDgtMzEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBCdXR0ZXJmbGllcyBzaG91bGQgYmUgYWxsb2NhdGVkIGluIEF1
eGlsaWFyeSBNYXJrZWRTcGFjZSBpbnN0ZWFkIG9mIENvcGllZFNwYWNlIGFuZCB3ZSBzaG91bGQg
cmV3cml0ZSBhcyBtdWNoIG9mIHRoZSBHQyBhcyBuZWVkZWQgdG8gbWFrZSB0aGlzIG5vdCBhIHJl
Z3Jlc3Npb24KSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbnNlLXNldC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHJldmlzaW9u
IDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZW5zZS1zZXQuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIAorICAgIGZ1bmN0aW9uIGJl
bmNoKG5hbWUsIGYsIGFyZykgeworICAgICAgICB2YXIgc3RhcnQgPSBuZXcgRGF0ZTsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IGYoYXJnKTsKKyAgICAgICAgdmFyIGVuZCA9IG5ldyBEYXRlOworICAg
ICAgICBjb25zdCB2ZXJib3NlID0gZmFsc2U7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgcHJpbnQobmFtZSArICIgIiArIHJlc3VsdCArICIgIiArIChlbmQtc3RhcnQpICsgIm1z
Iik7CisgICAgfQorCisgICAgdmFyIGRlbnNlU2V0ID0gbmV3IFNldDsKKyAgICB2YXIgZXhjbHVk
ZVNldCA9IFsxMjMsIDEyMzAsIDEyMzAwLCAxMjMwMDAsIDIzNCwgMjM0MCwgMjM0MDBdOworICAg
IGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IDVlNjsgKytpZHgpIHsKKyAgICAgICAgaWYgKGV4Y2x1
ZGVTZXQuaW5jbHVkZXMoaWR4KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBkZW5z
ZVNldC5hZGQoaWR4KTsKKyAgICB9CisKKyAgICBiZW5jaCgiRGVuc2UgU2V0IFByb3BlcnR5IEV4
aXN0ZW5jZSIsIGZ1bmN0aW9uKHMpIHsKKyAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCA1ZTY7ICsraSkKKyAgICAgICAgICAgIGlmIChzLmhhcyhpKSkK
KyAgICAgICAgICAgICAgICBjb3VudCsrCisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9LCBk
ZW5zZVNldCk7CisKK30pKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1t
YXAtaXRlcmF0aW9uLXdpdGgtYWRkaXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2xhcmdlLW1hcC1pdGVyYXRpb24td2l0aC1hZGRpdGlvbnMuanMJKHJldmlz
aW9uIDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdp
dGgtYWRkaXRpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2xldCBjb3Vu
dGVyID0gMDsKK2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0g
b2YgbWFwKSB7CisgICAgICAgIGlmIChNYXRoLnJhbmRvbSgpID4gMC45NSkgeworICAgICAgICAg
ICAgbWFwLnNldCgiIiArIGNvdW50ZXIsIGNvdW50ZXIpOworICAgICAgICAgICAgKytjb3VudGVy
OworICAgICAgICB9CisgICAgfQorfQorbm9JbmxpbmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKCkg
eworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsg
aSsrKQorICAgICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5v
dygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXAp
OworICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
cHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdpdGgtbXV0YXRpb24uanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRo
LW11dGF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbGFy
Z2UtbWFwLWl0ZXJhdGlvbi13aXRoLW11dGF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjUgQEAKK2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0g
b2YgbWFwKSB7CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICAgICAgaWYgKE1hdGgucmFuZG9t
KCkgPiAwLjk1KSB7CisgICAgICAgICAgICBtYXAuZGVsZXRlKGtleSk7CisgICAgICAgIH0KKyAg
ICB9Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9
IG5ldyBNYXA7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA4MDAwMDsgaSsrKQorICAgICAgICBt
YXAuc2V0KGksIGkrMSk7CisKKyAgICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgICAgIGJhcihtYXApOworICAgIGNvbnN0IHZl
cmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3co
KSAtIHN0YXJ0KTsKKworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9s
YXJnZS1tYXAtaXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1h
cmtzL2xhcmdlLW1hcC1pdGVyYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjIgQEAKK2Z1bmN0aW9uIGJhcihtYXApIHsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0g
b2YgbWFwKSB7CisgICAgICAgIGlmICh2YWx1ZSAtIDEgIT09IGtleSkKKyAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIGl0ZXJhdGlvbiEiKTsKKyAgICB9Cit9Citub0lubGluZShiYXIp
OworCitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgZm9yIChs
ZXQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKQorICAgICAgICBtYXAuc2V0KGksIGkrMSk7CisKKyAg
ICBsZXQgc3RhcnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBp
KyspCisgICAgICAgIGJhcihtYXApOworICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0YXJ0KTsKKworfQorZm9v
KCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9tYXAtZ2V0LWdldC1jc2UuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFwLWdldC1nZXQtY3NlLmpzCShy
ZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFwLWdldC1nZXQtY3NlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcgQEAKK2Z1bmN0aW9uIGJhcihtYXAsIHApIHsK
KyAgICByZXR1cm4gbWFwLmdldChwKSArIG1hcC5nZXQocCk7Cit9Citub0lubGluZShiYXIpOwor
CitmdW5jdGlvbiBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbGV0IGl0ZW1z
ID0gWworICAgICAgICBbMTAsIDUwXSwKKyAgICAgICAgWyI0NTAiLCA3OF0sCisgICAgICAgIFt7
fSwge31dLAorICAgICAgICBbU3ltYm9sKCksIHRydWVdLAorICAgICAgICBbdW5kZWZpbmVkLCBu
dWxsXSwKKyAgICAgICAgW3RydWUsIG51bGxdLAorICAgICAgICBbZmFsc2UsIHRydWVdLAorICAg
ICAgICBbNDUuODcsIHt9XQorICAgIF07CisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIGl0
ZW1zKQorICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworICAgIGxldCBzdGFydCA9IERhdGUu
bm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwMDAwOyBpKyspCisgICAgICAgIGJh
cihtYXAsIGl0ZW1zW2kgJSBpdGVtcy5sZW5ndGhdWzBdKTsKKyAgICBjb25zdCB2ZXJib3NlID0g
ZmFsc2U7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIHByaW50KERhdGUubm93KCkgLSBzdGFy
dCk7Cit9Citmb28oKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL21hcC1oYXMtZ2V0
LWNzZS1vcHBvcnR1bml0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9tYXAtaGFzLWdldC1jc2Utb3Bwb3J0dW5pdHkuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9tYXAtaGFzLWdldC1jc2Utb3Bwb3J0dW5pdHkuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyOCBAQAorZnVuY3Rpb24gYmFyKG1hcCwgcCkgeworICAgIGlmICht
YXAuaGFzKHApKQorICAgICAgICByZXR1cm4gbWFwLmdldChwKTsKK30KK25vSW5saW5lKGJhcik7
CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBsZXQgaXRl
bXMgPSBbCisgICAgICAgIFsxMCwgNTBdLAorICAgICAgICBbIjQ1MCIsIDc4XSwKKyAgICAgICAg
W3t9LCB7fV0sCisgICAgICAgIFtTeW1ib2woKSwgdHJ1ZV0sCisgICAgICAgIFt1bmRlZmluZWQs
IG51bGxdLAorICAgICAgICBbdHJ1ZSwgbnVsbF0sCisgICAgICAgIFtmYWxzZSwgdHJ1ZV0sCisg
ICAgICAgIFs0NS44Nywge31dCisgICAgXTsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Yg
aXRlbXMpCisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAgbGV0IHN0YXJ0ID0gRGF0
ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDA7IGkrKykKKyAgICAgICAg
YmFyKG1hcCwgaXRlbXNbaSAlIGl0ZW1zLmxlbmd0aF1bMF0pOworICAgIGNvbnN0IHZlcmJvc2Ug
PSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3coKSAtIHN0
YXJ0KTsKK30KK2ZvbygpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvc3BhcnNlLXNl
dC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9zcGFyc2Utc2V0Lmpz
CShyZXZpc2lvbiAwKQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3Mvc3BhcnNlLXNldC5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1IEBACisoZnVuY3Rpb24oKSB7CisgICAgCisgICAg
ZnVuY3Rpb24gYmVuY2gobmFtZSwgZiwgYXJnKSB7CisgICAgICAgIHZhciBzdGFydCA9IG5ldyBE
YXRlOworICAgICAgICB2YXIgcmVzdWx0ID0gZihhcmcpOworICAgICAgICB2YXIgZW5kID0gbmV3
IERhdGU7CisgICAgICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBwcmludChuYW1lICsgIiAiICsgcmVzdWx0ICsgIiAiICsgKGVuZC1z
dGFydCkgKyAibXMiKTsKKyAgICB9CisKKworICAgIHZhciBzcGFyc2VTZXQgPSBuZXcgU2V0Owor
ICAgIGZvciAodmFyIHggb2YgWzEyMywgMTIzMCwgMTIzMDAsIDEyMzAwMCwgMjM0LCAyMzQwLCAy
MzQwMF0pIHsKKyAgICAgICAgc3BhcnNlU2V0LmFkZCh4KTsKKyAgICB9CisKKyAgICBiZW5jaCgi
U3BhcnNlIFNldCBQcm9wZXJ0eSBFeGlzdGVuY2UiLCBmdW5jdGlvbihzKSB7CisgICAgICAgIHZh
ciBjb3VudCA9IDA7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNWU2OyArK2kpCisgICAg
ICAgICAgICBpZiAocy5oYXMoaSkpCisgICAgICAgICAgICAgICAgY291bnQrKworICAgICAgICBy
ZXR1cm4gY291bnQ7CisgICAgfSwgc3BhcnNlU2V0KTsKK30pKCk7CkluZGV4OiBKU1Rlc3RzL3N0
cmVzcy9tYXAtY3NlLWNvcnJlY3RuZXNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvc3RyZXNz
L21hcC1jc2UtY29ycmVjdG5lc3MuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9t
YXAtY3NlLWNvcnJlY3RuZXNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKK2Z1
bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkJhZCByZXN1bHQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiB0ZXN0SGFz
KG1hcCwga2V5LCBmKSB7CisgICAgbGV0IGZpcnN0ID0gbWFwLmhhcyhrZXkpOworICAgIGYoKTsK
KyAgICBsZXQgc2Vjb25kID0gbWFwLmhhcyhrZXkpOworICAgIHJldHVybiB7Zmlyc3QsIHNlY29u
ZH07Cit9Citub0lubGluZSh0ZXN0SGFzKTsKKworZnVuY3Rpb24gdGVzdEdldChtYXAsIGtleSwg
ZikgeworICAgIGxldCBmaXJzdCA9IG1hcC5nZXQoa2V5KTsKKyAgICBmKCk7CisgICAgbGV0IHNl
Y29uZCA9IG1hcC5nZXQoa2V5KTsKKyAgICByZXR1cm4ge2ZpcnN0LCBzZWNvbmR9OworfQorbm9J
bmxpbmUodGVzdEdldCk7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1h
cDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGxldCBr
ZXkgPSBpOworICAgICAgICBtYXAuc2V0KGtleSwga2V5KTsKKyAgICAgICAgbGV0IGYgPSAoKSA9
PiBtYXAuZGVsZXRlKGtleSk7CisgICAgICAgIG5vSW5saW5lKGYpOworICAgICAgICBsZXQge2Zp
cnN0LCBzZWNvbmR9ID0gdGVzdEhhcyhtYXAsIGtleSwgZik7CisgICAgICAgIGFzc2VydChmaXJz
dCk7CisgICAgICAgIGFzc2VydCghc2Vjb25kKTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQga2V5ID0gaTsKKyAgICAgICAgbWFwLnNl
dChrZXksIGtleSk7CisgICAgICAgIGxldCBmID0gKCkgPT4ge307CisgICAgICAgIG5vSW5saW5l
KGYpOworICAgICAgICBsZXQge2ZpcnN0LCBzZWNvbmR9ID0gdGVzdEhhcyhtYXAsIGtleSwgZik7
CisgICAgICAgIGFzc2VydChmaXJzdCk7CisgICAgICAgIGFzc2VydChzZWNvbmQpOworICAgIH0K
KworCisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDAwMDA7IGkrKykgeworICAgICAgICBsZXQg
a2V5ID0gaTsKKyAgICAgICAgbGV0IHZhbHVlID0ge307CisgICAgICAgIG1hcC5zZXQoa2V5LCB2
YWx1ZSk7CisgICAgICAgIGxldCBmID0gKCkgPT4gbWFwLmRlbGV0ZShrZXkpOworICAgICAgICBu
b0lubGluZShmKTsKKyAgICAgICAgbGV0IHtmaXJzdCwgc2Vjb25kfSA9IHRlc3RHZXQobWFwLCBr
ZXksIGYpOworICAgICAgICBhc3NlcnQoZmlyc3QgPT09IHZhbHVlKTsKKyAgICAgICAgYXNzZXJ0
KHNlY29uZCA9PT0gdW5kZWZpbmVkKTsKKyAgICB9CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAx
MDAwMDA7IGkrKykgeworICAgICAgICBsZXQga2V5ID0gaTsKKyAgICAgICAgbGV0IHZhbHVlID0g
e307CisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAgICAgIGxldCBmID0gKCkgPT4g
e307CisgICAgICAgIG5vSW5saW5lKGYpOworICAgICAgICBsZXQge2ZpcnN0LCBzZWNvbmR9ID0g
dGVzdEdldChtYXAsIGtleSwgZik7CisgICAgICAgIGFzc2VydChmaXJzdCA9PT0gdmFsdWUpOwor
ICAgICAgICBhc3NlcnQoc2Vjb25kID09PSB2YWx1ZSk7CisgICAgfQorfQorZm9vKCk7CkluZGV4
OiBKU1Rlc3RzL3N0cmVzcy9tYXAtaXRlcmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMv
c3RyZXNzL21hcC1pdGVyYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL3N0cmVzcy9t
YXAtaXRlcmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzk1IEBACitmdW5jdGlv
biBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQg
cmVzdWx0ISIpOworfQorbm9JbmxpbmUoYXNzZXJ0KTsKKworZnVuY3Rpb24gdGVzdDEoKSB7Cisg
ICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIGxldCBpdGVy
ID0gbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIu
bmV4dCgpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gMjApOworICAgIGFzc2VydCh2YWx1ZVsx
XSA9PT0gMzApOworICAgIGFzc2VydCghZG9uZSk7CisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVy
Lm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZp
bmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDEoKTsKKwor
ZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgy
MCwgMzApOworICAgIGxldCBpdGVyID0gbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBsZXQg
e3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gMjAp
OworICAgIGFzc2VydCh2YWx1ZVsxXSA9PT0gMzApOworICAgIGFzc2VydCghZG9uZSk7CisKKyAg
ICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAg
YXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgbWFwLnNldCg0MCwgNTApOworICAg
ICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydChkb25lKTsKKyAgICBh
c3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsg
aSsrKQorICAgIHRlc3QyKCk7CisKK2Z1bmN0aW9uIHRlc3QzKCkgeworICAgIGxldCBtYXAgPSBu
ZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAg
bGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOworICAgIGxldCB7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KHZhbHVlWzBdID09PSAyMCk7CisgICAgYXNzZXJ0
KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKworICAgICh7dmFsdWUsIGRv
bmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVl
WzBdID09PSA1MCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSA2MCk7CisKKyAgICBtYXAuc2V0
KCJmb28iLCAiYmFyIik7CisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAg
YXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWVbMF0gPT09ICJmb28iKTsKKyAgICBhc3Nl
cnQodmFsdWVbMV0gPT09ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0
KCkpOworICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7
Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QzKCk7CisKK2Z1bmN0
aW9uIHRlc3Q0KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMw
KTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJh
dG9yXSgpOworICAgIGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0
KHZhbHVlWzBdID09PSAyMCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNz
ZXJ0KCFkb25lKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDQoKTsK
KworZnVuY3Rpb24gdGVzdDUoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNl
dCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcFtTeW1i
b2wuaXRlcmF0b3JdKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAg
ICBhc3NlcnQodmFsdWVbMF0gPT09IDIwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0gPT09IDMwKTsK
KyAgICBhc3NlcnQoIWRvbmUpOworCisgICAgbWFwLmNsZWFyKCk7CisgICAgbWFwLnNldCg1MCwg
NjApOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KCFk
b25lKTsKKyAgICBhc3NlcnQodmFsdWVbMF0gPT09IDUwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0g
PT09IDYwKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2Vy
dChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3Q1KCk7CisgCitmdW5jdGlvbiB0ZXN0NigpIHsK
KyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbGV0IGkg
PSAwOworICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgbWFwLmRl
bGV0ZShrZXkpOworICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworICAgICAgICBpKys7Cisg
ICAgICAgIGlmIChpID09PSAxMDAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGFz
c2VydChpID09PSAxMDAwKTsKK30KK3Rlc3Q2KCk7CisKK2Z1bmN0aW9uIHRlc3Q3KCkgeworICAg
IGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBsZXQgaSA9IDA7
CisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG1hcCkgeworICAgICAgICBtYXAuY2xlYXIo
KTsKKyAgICAgICAgbWFwLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgaSsrOworICAgICAgICBp
ZiAoaSA9PT0gMTAwMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBhc3NlcnQoaSA9
PT0gMTAwMCk7Cit9Cit0ZXN0NygpOworCitmdW5jdGlvbiB0ZXN0OCgpIHsKKyAgICBsZXQgbWFw
ID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCA1MDA7IGkrKykKKyAgICAgICAgbWFwLnNldChpLCBpKTsKKyAgICBsZXQgaSA9IDA7CisgICAg
Zm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG1hcCkgeworICAgICAgICBhc3NlcnQoa2V5ID09PSB2
YWx1ZSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgaWYgKGtleSA9PT0gMjUwKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGFzc2VydChpID09PSAyNTEpOworfQordGVzdDgoKTsKKwor
ZnVuY3Rpb24gdGVzdDkoKSB7CisgICAgYXNzZXJ0KDEvKC0wKSA9PT0gLUluZmluaXR5KTsKKwor
ICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoLTAsIDUwKTsgLy8gV2Ugc2hvdWxk
IG5vcm1hbGl6ZSAtMCB0byArMCBpbiB0aGUga2V5LgorICAgIGZvciAobGV0IFtrZXksIHZhbHVl
XSBvZiBtYXApIHsKKyAgICAgICAgYXNzZXJ0KDEva2V5ID09PSBJbmZpbml0eSk7CisgICAgfQor
ICAgIGFzc2VydChtYXAuZ2V0KDAuMCkgPT09IDUwKTsKKyAgICBhc3NlcnQobWFwLmdldCgwKSA9
PT0gNTApOworICAgIGFzc2VydChtYXAuZ2V0KC0wKSA9PT0gNTApOworICAgIGFzc2VydChtYXAu
Z2V0KCswKSA9PT0gNTApOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0
ZXN0OSgpOworCitmdW5jdGlvbiB0ZXN0MTAoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7Cisg
ICAgbWFwLnNldCgibmVnWmVybyIsIC0wKTsgLy8gV2Ugc2hvdWxkICpub3QqIG5vcm1hbGl6ZSAt
MCB0byArMCBpbiB0aGUgdmFsdWUuCisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG1hcCkg
eworICAgICAgICBhc3NlcnQoMS92YWx1ZSA9PT0gLUluZmluaXR5KTsKKyAgICB9Cit9Citmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxMCgpOworCitmdW5jdGlvbiB0ZXN0
MTEoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAg
IGxldCBpdGVyID0gbWFwLmtleXMoKTsKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4
dCgpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAyMCk7CisKKyAg
ICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAg
YXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVy
Lm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmlu
ZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTEoKTsKKwor
ZnVuY3Rpb24gdGVzdDEyKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQo
MjAsIDMwKTsKKyAgICBsZXQgaXRlciA9IG1hcC52YWx1ZXMoKTsKKyAgICBsZXQge3ZhbHVlLCBk
b25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVl
ID09PSAzMCk7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3Nl
cnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRlZmluZWQpOworCisgICAgKHt2YWx1
ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAg
ICB0ZXN0MTIoKTsKKworZnVuY3Rpb24gdGVzdDEzKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFw
OworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0
ZXIgPSBtYXAua2V5cygpOworICAgIGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7Cisg
ICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDIwKTsKKworICAgIG1hcC5j
bGVhcigpOworICAgIG1hcC5zZXQoImZvbyIsICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09
PSAiZm9vIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2Vy
dChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBp
ID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxMygpOworCitmdW5jdGlvbiB0ZXN0MTQoKSB7
CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIG1hcC5z
ZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcC52YWx1ZXMoKTsKKyAgICBsZXQge3ZhbHVl
LCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlID09PSAzMCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKyAgICBtYXAuc2V0KCJmb28iLCAiYmFy
Iik7CisKKyAgICA7KHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRv
bmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1
bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTQo
KTsKKworZnVuY3Rpb24gdGVzdDE1KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1h
cC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXAu
a2V5cygpOworCisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3Nl
cnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMjApOworCisgICAgOyh7dmFsdWUsIGRv
bmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUg
PT09IDUwKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJhciIp
OworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUp
OworICAgIGFzc2VydCh2YWx1ZSA9PT0gImZvbyIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1bmRl
ZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0MTUoKTsK
KworZnVuY3Rpb24gdGVzdDE2KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5z
ZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0ZXIgPSBtYXAudmFs
dWVzKCk7CisKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2Vy
dCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAzMCk7CisKKyAgICA7KHt2YWx1ZSwgZG9u
ZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9
PT0gNjApOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBtYXAuc2V0KCJmb28iLCAiYmFyIik7
CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydCghZG9uZSk7
CisgICAgYXNzZXJ0KHZhbHVlID09PSAiYmFyIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0
ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVm
aW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3QxNigpOwor
CitmdW5jdGlvbiB0ZXN0MTcoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNl
dCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcC5rZXlz
KCk7CisKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOworICAgIGFzc2VydCgh
ZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAyMCk7CisKKyAgICA7KHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0g
NTApOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBtYXAuc2V0KCJmb28iLCAiYmFyIik7CisK
KyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydCghZG9uZSk7Cisg
ICAgYXNzZXJ0KHZhbHVlID09PSAiZm9vIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIu
bmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5l
ZCk7CisKKyAgICBtYXAuc2V0KCJoZWxsbyIsICJ3b3JsZCIpOworICAgICh7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0g
dW5kZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDE3
KCk7CisKK2Z1bmN0aW9uIHRlc3QxOCgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBt
YXAuc2V0KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFw
LnZhbHVlcygpOworCisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBh
c3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMzApOworCisgICAgOyh7dmFsdWUs
IGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09IDYwKTsKKworICAgIG1hcC5jbGVhcigpOworCisgICAgbWFwLnNldCgiZm9vIiwgImJh
ciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRv
bmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0g
PSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSB1
bmRlZmluZWQpOworCisgICAgbWFwLnNldCgiaGVsbG8iLCAid29ybGQiKTsKKyAgICAoe3ZhbHVl
LCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAg
IHRlc3QxOCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0OTIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzAwIEBACisyMDE2LTA5LTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgVGhpcyBwYXRjaCByZXZhbXBzIGhvdyB3ZSBp
bXBsZW1lbnQgTWFwIGFuZCBTZXQuIEl0IHVzZXMKKyAgICAgICAgYSBuZXcgaGFzaCBtYXAgaW1w
bGVtZW50YXRpb24uIFRoZSBoYXNoIG1hcCB1c2VzIGxpbmVhcgorICAgICAgICBwcm9iaW5nIGFu
ZCBpdCB1c2VzIFdhbmcncyA2NCBiaXQgaGFzaCBmdW5jdGlvbiBmb3IgSlNWYWx1ZXMKKyAgICAg
ICAgdGhhdCBhcmVuJ3Qgc3RyaW5ncy4gU3RyaW5ncyB1c2UgU3RyaW5nSW1wbCdzIGhhc2ggZnVu
Y3Rpb24uCisgICAgICAgIFRoZSByZWFzb24gSSB3YW50ZWQgdG8gcm9sbCBvdXIgb3duIEhhc2hU
YWJsZSBpcyB0d29mb2xkOgorICAgICAgICBJIGRpZG4ndCB3YW50IHRvIGlubGluZSBXVEY6Okhh
c2hNYXAncyBpbXBsZW1lbnRhdGlvbiBpbnRvIG91cgorICAgICAgICBKSVQsIHNpbmNlIHRoYXQg
c2VlbXMgZXJyb3IgcHJvbmUgYW5kIHVubWFpbnRhaW5hYmxlLiBBbHNvLCBJIHdhbnRlZAorICAg
ICAgICBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUgZm9yIGhhc2ggbWFwIGJ1Y2tldHMgd2hlcmUgYnVj
a2V0cyBhbHNvIGV4aXN0IGluCisgICAgICAgIGEgbGlua2VkIGxpc3QuCisKKyAgICAgICAgVGhl
IHJlYXNvbiBmb3IgbWFraW5nIGJ1Y2tldHMgcGFydCBvZiBhIGxpbmtlZCBsaXN0IGlzIHRoYXQg
aXRlcmF0aW9uCisgICAgICAgIGlzIG5vdyBzaW1wbGUuIEl0ZXJhdGlvbiB3b3JrcyBieSBqdXN0
IHRyYXZlcnNpbmcgYSBsaW5rZWQgbGlzdC4KKyAgICAgICAgVGhpcyBkZXNpZ24gYWxzbyBhbGxv
d3MgZm9yIGEgc2ltcGxlIGltcGxlbWVudGF0aW9uIHdoZW4gZG9pbmcgaXRlcmF0aW9uCisgICAg
ICAgIHdoaWxlIHRoZSBoYXNoIHRhYmxlIGlzIG11dGF0aW5nLiBXaGVuZXZlciB3ZSByZW1vdmUg
YSBidWNrZXQgZnJvbQorICAgICAgICB0aGUgaGFzaCB0YWJsZSwgaXQgaXMgcmVtb3ZlZCBmcm9t
IHRoZSBsaXN0LCBtZWFuaW5nIGl0ZW1zIGluIHRoZQorICAgICAgICBsaXN0IGRvbid0IHBvaW50
IHRvIGl0LiBIb3dldmVyLCB0aGUgcmVtb3ZlZCBidWNrZXQgd2lsbCBzdGlsbCBwb2ludAorICAg
ICAgICB0byB0aGluZ3MgdGhhdCBhcmUgZWl0aGVyIGluIHRoZSBsaXN0LCBvciBoYXZlIGFsc28g
YmVlbiByZW1vdmVkLgorICAgICAgICBlLmcsIGZyb20gYSByZW1vdmVkIGJ1Y2tldCwgeW91IGNh
biBhbHdheXMgZm9sbG93IHBvaW50ZXJzIHVudGlsIHlvdQorICAgICAgICBlaXRoZXIgZmluZCBh
biBpdGVtIGluIHRoZSBsaXN0LCBvciB5b3UgZmluZCB0aGUgdGFpbCBvZiB0aGUgbGlzdC4KKyAg
ICAgICAgVGhpcyBpcyBhIHJlYWxseSBuaWNlIHByb3BlcnR5IGJlY2F1c2UgaXQgbWVhbnMgdGhh
dCBhIE1hcCBvciBTZXQKKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byByZWFzb24gYWJvdXQgdGhl
IGFsbCB0aGUgaXRlcmF0b3JzIHRoYXQgcG9pbnQKKyAgICAgICAgaW50byBpdHMgbGlzdC4gQWxz
bywgd2hlbmV2ZXIgd2UgYWRkIGl0ZW1zIHRvIHRoZSBNYXAgb3IgU2V0LCB3ZQorICAgICAgICBo
aWphY2sgdGhlIHRhaWwgYXMgdGhlIG5ldyBpdGVtLCBhbmQgbWFrZSB0aGUgbmV3IGl0ZW0gcG9p
bnQgdG8gYSBuZXdseQorICAgICAgICBjcmVhdGVkIHRhaWwuIFRoaXMgbWVhbnMgdGhhdCBhbnkg
aXRlcmF0b3IgdGhhdCBwb2ludGVkIHRvIHRoZSAidGFpbCIgbm93CisgICAgICAgIHBvaW50cyB0
byBub24tdGFpbCBpdGVtcy4gVGhpcyBtYWtlcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYWRkaW5n
IHRoaW5ncworICAgICAgICB0byB0aGUgTWFwL1NldCB3aGlsZSBpdGVyYXRpbmcgZWFzeS4KKwor
ICAgICAgICBJIGFsc28gbWFkZSBNYXAucHJvdG90eXBlLmdldCwgTWFwLnByb3RvdHlwZS5oYXMs
IGFuZCBTZXQucHJvdG90eXBlLmhhcworICAgICAgICBpbnRvIGludHJpbnNpY3MgaW4gdGhlIERG
Ry4gVGhlIElSIGNhbiBub3cgcmVhc29uIGFib3V0IGhhc2ggbWFwCisgICAgICAgIG9wZXJhdGlv
bnMgYW5kIGNhbiBldmVuIGRvIENTRSBvdmVyIFdhbmcncyBoYXNoIGZ1bmN0aW9uLCBoYXNoIG1h
cAorICAgICAgICBidWNrZXQgbG9va3VwcywgaGFzaCBtYXAgYnVja2V0IGxvYWRzLCBhbmQgdGVz
dGluZyBpZiBhIGtleSBpcyBpbgorICAgICAgICB0aGUgaGFzaCB0YWJsZS4gVGhpcyBtYWtlcyBj
b2RlIHBhdHRlcm5zIGZvciBNYXAgbGlrZSBzbywgc3VwZXIgZmFzdAorICAgICAgICBpbiB0aGUg
RlRMLCBzaW5jZSB3ZSB3aWxsIG9ubHkgYmUgZG9pbmcgYSBzaW5nbGUgaGFzaCBhbmQgaGFzaCBi
dWNrZXQgbG9va3VwOgorCisgICAgICAgIGBgYAorICAgICAgICBmdW5jdGlvbiBnZXRLZXlJZlBy
ZXNlbnQobWFwLCBrZXkpIHsKKyAgICAgICAgICAgIGlmIChtYXAuaGFzKGtleSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1hcC5nZXQoa2V5KTsKKyAgICAgICAgfQorICAgICAgICBgYGAKKwor
ICAgICAgICBUaGlzIHBhdGNoIGlzIHJvdWdobHkgYW4gOCUgc3BlZWR1cCBvbiBFUzZTYW1wbGVC
ZW5jaC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3BlY3Vs
YXRlZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8pOgor
ICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljQ2FsbCk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAg
ICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgorICAg
ICAgICAqIGRmZy9ERkdFZGdlLmg6CisgICAgICAgIChKU0M6OkRGRzo6RWRnZTo6c2hpZnQpOgor
ICAgICAgICAoSlNDOjpERkc6OkVkZ2U6Om1ha2VXb3JkKToKKyAgICAgICAgKiBkZmcvREZHRml4
dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToK
KyAgICAgICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJ
bnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR0hlYXBMb2NhdGlvbi5oOgorICAgICAgICAqIGRm
Zy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzSGVhcFByZWRpY3Rpb24p
OgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgICogZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlTWFwT2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlU2V0T2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICog
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdVc2VLaW5kLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6Cisg
ICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVy
Rm9yKToKKyAgICAgICAgKEpTQzo6REZHOjppc0NlbGwpOgorICAgICAgICAqIGZ0bC9GVExBYnN0
cmFjdEhlYXBSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6
CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBp
bGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU1h
cEhhc2gpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlR2V0
TWFwQnVja2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGls
ZUxvYWRGcm9tSlNNYXBCdWNrZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0IzOjpjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6Omxvd01hcE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6Omxvd1NldE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvQjM6Omxvd01hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OnNwZWN1bGF0ZU1hcE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6OnNwZWN1bGF0ZVNldE9iamVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvQjM6OnNldE1hcEJ1Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
QjM6Omxvd1JlZ0V4cE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpM
b3dlckRGR1RvQjM6Omxvd1N0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0IzOjpzcGVjdWxhdGVSZWdFeHBPYmplY3QpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpzZXRTdG9yYWdlKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoKKyAgICAgICAgKEpTQzo6QXNzZW1ibHlI
ZWxwZXJzOjp3YW5nc0ludDY0SGFzaCk6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5o
OgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZURlc3RydWN0aWJs
ZU9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAg
ICAgKiBwYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpNb2R1bGVBbmFs
eXplcjo6TW9kdWxlQW5hbHl6ZXIpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDxEYXRhPjo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OmNvcHlCYWNr
aW5nU3RvcmUpOgorICAgICAgICAqIHJ1bnRpbWUvSGFzaE1hcEltcGwuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNlbGVjdFN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
Okhhc2hNYXBCdWNrZXQ6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBC
dWNrZXQ6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6Okhhc2hNYXBCdWNr
ZXQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpzZXROZXh0KToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEJ1Y2tldDo6c2V0UHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6
OnNldEtleSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6a2V5KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tl
dDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpuZXh0KToKKyAgICAgICAg
KEpTQzo6SGFzaE1hcEJ1Y2tldDo6cHJldik6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6
OmRlbGV0ZWQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0OjpzZXREZWxldGVkKToKKyAg
ICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6b2Zmc2V0T2ZLZXkpOgorICAgICAgICAoSlNDOjpI
YXNoTWFwQnVja2V0OjpvZmZzZXRPZlZhbHVlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1ZmZl
cjo6YWxsb2NhdGlvblNpemUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpidWZmZXIp
OgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjph
cmVLZXlzRXF1YWwpOgorICAgICAgICAoSlNDOjpub3JtYWxpemVNYXBLZXkpOgorICAgICAgICAo
SlNDOjpqc01hcEhhc2gpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6c2VsZWN0U3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAg
ICAgIChKU0M6Okhhc2hNYXBJbXBsOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1w
bDo6SGFzaE1hcEltcGwpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
SGFzaE1hcEltcGw6OmVtcHR5VmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNF
bXB0eSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpkZWxldGVkVmFsdWUpOgorICAgICAg
ICAoSlNDOjpIYXNoTWFwSW1wbDo6aXNEZWxldGVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcElt
cGw6OmZpbmRCdWNrZXQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6SGFzaE1hcEltcGw6Omhhcyk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjph
ZGQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6
SGFzaE1hcEltcGw6OnNpemUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6Y2xlYXIpOgor
ICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6YnVmZmVyU2l6ZUluQnl0ZXMpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6b2Zmc2V0T2ZCdWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNoTWFw
SW1wbDo6b2Zmc2V0T2ZDYXBhY2l0eSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpoZWFk
KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnRhaWwpOgorICAgICAgICAoSlNDOjpIYXNo
TWFwSW1wbDo6YXBwcm94aW1hdGVTaXplKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmZp
bmRCdWNrZXRBbHJlYWR5SGFzaGVkQW5kTm9ybWFsaXplZCk6CisgICAgICAgIChKU0M6Okhhc2hN
YXBJbXBsOjpyZWhhc2gpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6bWFrZUFuZFNldE5l
d0J1ZmZlcik6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6
CisgICAgICAgIChKU0M6OnNhbWVWYWx1ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9i
amVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojppbml0KToKKyAgICAgICAg
KiBydW50aW1lL0pTTWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmRlc3Ryb3kpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6ZXN0aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNNYXA6OmNvcHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6
aGFzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNpemUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKU01hcDo6Z2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OnNl
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpjbGVhcik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTTWFwOjpyZW1vdmUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNN
YXAuaDoKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkpTTWFwOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpKU01hcDo6Z2V0KToKKyAgICAgICAg
KEpTQzo6SlNNYXA6OnNldCk6CisgICAgICAgIChKU0M6OkpTTWFwOjpKU01hcCk6CisgICAgICAg
IChKU0M6OkpTTWFwOjpFbnRyeTo6a2V5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6
OkVudHJ5Ojp2YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6dmlz
aXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6c2V0S2V5
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRLZXlXaXRob3V0V3Jp
dGVCYXJyaWVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpFbnRyeTo6Y2xlYXIpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXBJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpT
TWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6OmNsb25lKToK
KyAgICAgICAgKiBydW50aW1lL0pTTWFwSXRlcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6SlNNYXBJ
dGVyYXRvcjo6YWR2YW5jZUl0ZXIpOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpuZXh0
KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6bmV4dEtleVZhbHVlKToKKyAgICAgICAg
KEpTQzo6SlNNYXBJdGVyYXRvcjo6SlNNYXBJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTTWFw
SXRlcmF0b3I6OnNldEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6Zmlu
aXNoKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6aXRlcmF0b3JEYXRh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0pTTW9kdWxlTG9hZGVyLmg6CisgICAgICAgIChKU0M6OkpTTW9kdWxlTG9hZGVyOjpjcmVh
dGUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwOgorICAgICAgICAoSlND
OjpKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNN
b2R1bGVSZWNvcmQuaDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVSZWNvcmQ6OmNyZWF0ZSk6Cisg
ICAgICAgICogcnVudGltZS9KU1NldC5jcHA6CisgICAgICAgIChKU0M6OkpTU2V0OjpkZXN0cm95
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OmVzdGltYXRlZFNpemUpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU1NldDo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkpTU2V0Ojpjb3B5QmFja2luZ1N0b3JlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
SlNTZXQ6Omhhcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpzaXplKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpT
U2V0OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpyZW1vdmUpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTZXQuaDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNy
ZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpKU1NldDo6YWRkKToKKyAgICAgICAgKEpTQzo6SlNTZXQ6OkpTU2V0KToKKyAgICAgICAg
KEpTQzo6SlNTZXQ6OkVudHJ5OjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6
RW50cnk6OnZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5Ojp2aXNp
dENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpzZXRLZXkp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleVdpdGhvdXRXcml0
ZUJhcnJpZXIpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldFZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OkVudHJ5OjpjbGVhcik6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNT
ZXRJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9y
Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6Y2xvbmUpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNTZXRJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU1NldEl0
ZXJhdG9yOjphZHZhbmNlSXRlcik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6Om5leHQp
OgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpKU1NldEl0ZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6SlNTZXRJdGVyYXRvcjo6c2V0SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1NldEl0
ZXJhdG9yOjpmaW5pc2gpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpp
dGVyYXRvckRhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNUeXBlLmg6CisgICAg
ICAgICogcnVudGltZS9NYXBCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Ok1hcEJhc2U8
SGFzaE1hcEJ1Y2tldFR5cGU+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6TWFwQmFz
ZTxIYXNoTWFwQnVja2V0VHlwZT46OmVzdGltYXRlZFNpemUpOgorICAgICAgICAqIHJ1bnRpbWUv
TWFwQmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6c2l6ZSk6CisgICAgICAg
IChKU0M6Ok1hcEJhc2U6Omhhcyk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6OmNsZWFyKToKKyAg
ICAgICAgKEpTQzo6TWFwQmFzZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6Zmlu
ZEJ1Y2tldCk6CisgICAgICAgIChKU0M6Ok1hcEJhc2U6Om9mZnNldE9mSGFzaE1hcEltcGwpOgor
ICAgICAgICAoSlNDOjpNYXBCYXNlOjppbXBsKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpNYXBCYXNlOjpNYXBCYXNlKToKKyAgICAgICAg
KiBydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0TWFw
KToKKyAgICAgICAgKiBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAg
KEpTQzo6TWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9N
YXBQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0TWFwKToKKyAgICAgICAgKEpTQzo6cHJpdmF0ZUZ1bmNJ
c01hcCk6CisgICAgICAgIChKU0M6OnByaXZhdGVGdW5jTWFwSXRlcmF0b3JOZXh0KToKKyAgICAg
ICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHA6CisgICAgICAgIChKU0M6OnNhbWVW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaDoK
KyAgICAgICAgKiBydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29u
c3RydWN0U2V0KToKKyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICog
cnVudGltZS9TZXRQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpTZXRQcm90b3R5cGU6OmZp
bmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0U2V0KToKKyAgICAgICAgKEpTQzo6cHJp
dmF0ZUZ1bmNTZXRJdGVyYXRvck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAg
ICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAqIHJ1bnRpbWUvVk0uaDoKKwogMjAxNi0wOS0w
NiAgTWljaGFlbCBDYXRhbnphcm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAg
U2lsZW5jZSBHQ0Mgd2FybmluZyBzcGFtIGludHJvZHVjZWQgaW4gcjIwNTQ2MgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC02NzIsNiAr
NjcyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL0dlbmVyYXRv
ckZ1bmN0aW9uUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvR2VuZXJhdG9yUHJvdG90eXBlLmNw
cAogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAorICAgIHJ1bnRpbWUvSGFzaE1hcEltcGwu
Y3BwCiAgICAgcnVudGltZS9JZGVudGlmaWVyLmNwcAogICAgIHJ1bnRpbWUvSW5kZXhpbmdUeXBl
LmNwcAogICAgIHJ1bnRpbWUvSW5mZXJyZWRUeXBlLmNwcApAQCAtNzU3LDYgKzc1OCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9MYXp5Q2xhc3NTdHJ1Y3R1cmUu
Y3BwCiAgICAgcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAogICAgIHJ1bnRpbWUvTG9va3VwLmNw
cAorICAgIHJ1bnRpbWUvTWFwQmFzZS5jcHAKICAgICBydW50aW1lL01hcENvbnN0cnVjdG9yLmNw
cAogICAgIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9NYXBQ
cm90b3R5cGUuY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMTgsMTAgKzEzMTgsMTQgQEAK
IAkJNzkyMzNDMkIxRDM0NzE1NzAwQzVBODM0IC8qIEpJVE1hdGhJQy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyMzNDMjkxRDM0NzE1NzAwQzVBODM0
IC8qIEpJVE1hdGhJQy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTc5MkNCMzQ5MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTJDQjM0
NzFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovOyB9OwogCQk3OTJD
QjM0QTFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5MkNCMzQ4MUM0RUVENUMwMEQxM0FG
MyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTc5NUIxOTk3MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5NUIxOTk1
MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmNwcCAqLzsgfTsKKwkJNzk1QjE5OTgxRDc4QkUz
NTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk2NDY1NkExQjk1
MkZGMDAwMzA1OUVFIC8qIEdldFB1dEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDc5NjQ2NTY4MUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQdXRJbmZv
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk3
RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E3MUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi87IH07CiAJ
CTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzk3RTA3QTgx
QjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzk5RUY3QzQxQzU2RUQ5
NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09y
aWdpbk1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTc5QTA5MDdGMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RDFENzY4NDY1MDA4
Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovOyB9OworCQk3OUEwOTA4MDFENzY4NDY1MDA4Qjg4
OUIgLyogSGFzaE1hcEltcGwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5QTIyODM1MUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRo
UHJvZmlsZS5jcHAgKi87IH07CiAJCTc5QTIyODM2MUQzNUQ3MUYwMEQ4RTA2NyAvKiBBcml0aFBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5
QTIyODM0MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLzsgfTsKIAkJNzlBRjBC
RTQxRDNFRkQ0QzAwRTk1RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBRjBCRTMxRDNFRkQ0QzAwRTk1
RkE1IC8qIEpJVE1hdGhJQ0lubGluZVJlc3VsdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zNTY5LDEwICszNTczLDE0IEBACiAJCTc5MjMzQzI5
MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSklUTWF0aElDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MkNC
MzQ3MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29kZU9yaWdpbk1hcC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQQ1RvQ29kZU9yaWdpbk1hcC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5MkNCMzQ4MUM0RUVENUMwMEQxM0FGMyAvKiBQQ1RvQ29k
ZU9yaWdpbk1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQQ1RvQ29kZU9y
aWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OTVCMTk5NTFENzhCRTM1
MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNYXBCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk1QjE5OTYx
RDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTWFwQmFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTY0NjU2ODFC
OTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBHZXRQdXRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0Uw
N0E3MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9u
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5N0UwN0E4MUI4RkNGQjkw
MDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTlFRjdDMzFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3Jp
Z2luTWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUENUb09yaWdpbk1h
cC5oOyBwYXRoID0gYjMvQjNQQ1RvT3JpZ2luTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTc5QTA5MDdEMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIYXNoTWFwSW1wbC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFw
SW1wbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWFwSW1wbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzMzFEMzVENzFFMDBEOEUwNjcgLyog
QXJpdGhQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFy
aXRoUHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QTIyODM0MUQz
NUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXJpdGhQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
QTg5OUZFMUQzODYxMkUwMEQxOEM3MyAvKiBKSVRNYXRoSUNGb3J3YXJkcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKSVRNYXRoSUNGb3J3YXJkcy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNTgyNSw2ICs1ODMzLDggQEAKIAkJCQk3OTY0NjU2ODFCOTUyRkYw
MDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovLAogCQkJCUJDMDJFOUI4MEUxODQ1NDUwMDBGOTI5
NyAvKiBHZXR0ZXJTZXR0ZXIuY3BwICovLAogCQkJCUJDMzM3QkRFMEUxQUYwQjgwMDc2OTE4QSAv
KiBHZXR0ZXJTZXR0ZXIuaCAqLywKKwkJCQk3OUEwOTA3RDFENzY4NDY1MDA4Qjg4OUIgLyogSGFz
aE1hcEltcGwuY3BwICovLAorCQkJCTc5QTA5MDdFMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFw
SW1wbC5oICovLAogCQkJCTkzM0EzNDlEMDM4QUU4MEYwMDg2MzVDRSAvKiBJZGVudGlmaWVyLmNw
cCAqLywKIAkJCQk5MzNBMzQ5QTAzOEFFN0M2MDA4NjM1Q0UgLyogSWRlbnRpZmllci5oICovLAog
CQkJCTg2MDZEREU5MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oICovLApA
QCAtNjAzNSw2ICs2MDQ1LDggQEAKIAkJCQlBN0UyRUE2OTBGQjQ2MENGMDA2MDFGMDYgLyogTGl0
ZXJhbFBhcnNlci5oICovLAogCQkJCUY2OTJBODY4MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAu
Y3BwICovLAogCQkJCUY2OTJBODY5MDI1NTU5N0QwMUZGNjBGNyAvKiBMb29rdXAuaCAqLywKKwkJ
CQk3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgKi8sCisJCQkJNzk1QjE5
OTYxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCAqLywKIAkJCQlBNzAwODczNzE3Q0JFODUz
MDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwICovLAogCQkJCUE3MDA4NzM4MTdDQkU4NTMw
MEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oICovLAogCQkJCUE3ODUwN0Q1MTdDQkM2RkQwMDEx
RjZFNyAvKiBNYXBEYXRhLmggKi8sCkBAIC03MzI2LDYgKzczMzgsNyBAQAogCQkJCTBGNjRCMjdB
MUE3OTU3QjIwMDZFNEU2NiAvKiBDYWxsRWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ4
REUwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjJF
QzlCQjcxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk3OTVCMTk5ODFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjJENzU1RDcxQjg0RkI0QTAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODNCMTE0QkNGNzE4MDA4ODVCNEYgLyogQ2FsbExp
bmtJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzI5RTE0Q0E3REM1MDA4NUYzQzYgLyog
Q2FsbExpbmtTdGF0dXMuaCBpbiBIZWFkZXJzICovLApAQCAtNzQ5Myw2ICs3NTA2LDcgQEAKIAkJ
CQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyogREZHRmx1c2hlZEF0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0Q4OUNGODE3QTBCOENDMDA3NzNBRDggLyogREZHRmx1c2hGb3JtYXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkREODE1MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdGb3JBbGxLaWxs
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hN
YXBJbXBsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY5Q0M4OTE5M0FDNjBBMDA0NTc1OUUgLyog
REZHRnJvemVuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM2MTMyOERGODIwMDJC
MkFENyAvKiBERkdHZW5lcmF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlEQzgx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmggaW4gSGVhZGVycyAqLywKQEAgLTkyMjUsNiAr
OTIzOSw3IEBACiAJCQkJMEYwMzMyQzAxOEFERkFFMTAwNUY5NzlBIC8qIEV4aXRpbmdKSVRUeXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0
S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEExQzE3MDhCMDA3MDBCQjcyMkMgLyog
RlRMQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTc5QTA5MDdGMUQ3Njg0NjUw
MDhCODg5QiAvKiBIYXNoTWFwSW1wbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEExRTE3
MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjkzMjc0RDFDMUY2NkFBMDBDRjY1NjQgLyogR1BSSW5mby5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjQ4NTMyNzE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVj
b3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05MjY5LDYgKzkyODQsNyBAQAogCQkJCTUyQjMx
MEZEMTk3NEFFODcwMDgwODU3QyAvKiBGdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkU0QkZGMkIxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJp
ZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNDMTA3RUMzNzYwMDQyN0E0OCAvKiBG
dW5jdGlvblByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3OTVCMTk5NzFENzhCRTM1
MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQyRDM4RjFBREYx
MDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
QUFDRTYzQzE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNzY2RDJGMTVBOERDRTAwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJv
dXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDExIEBACiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKIAog
I2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5j
bHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCiAjaW5j
bHVkZSAiVmFsdWVQcm9maWxlLmgiCkBAIC0zNDYsNiArMzQ4LDEyIEBAIFNwZWN1bGF0ZWRUeXBl
IHNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbygKIAogICAgIGlmIChjbGFzc0luZm8gPT0gUmVnRXhw
T2JqZWN0OjppbmZvKCkpCiAgICAgICAgIHJldHVybiBTcGVjUmVnRXhwT2JqZWN0OworCisgICAg
aWYgKGNsYXNzSW5mbyA9PSBKU01hcDo6aW5mbygpKQorICAgICAgICByZXR1cm4gU3BlY01hcE9i
amVjdDsKKworICAgIGlmIChjbGFzc0luZm8gPT0gSlNTZXQ6OmluZm8oKSkKKyAgICAgICAgcmV0
dXJuIFNwZWNTZXRPYmplY3Q7CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mby0+aXNTdWJDbGFzc09m
KEpTRnVuY3Rpb246OmluZm8oKSkpCiAgICAgICAgIHJldHVybiBTcGVjRnVuY3Rpb247CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAko
cmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1
bGF0ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDQxICszOSw0MyBAQCBjbGFzcyBTdHJ1
Y3R1cmU7CiAKIHR5cGVkZWYgdWludDY0X3QgU3BlY3VsYXRlZFR5cGU7CiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY05vbmUgICAgICAgICAgICAgICA9IDA7IC8vIFdlIGRvbid0IGtu
b3cgYW55dGhpbmcgeWV0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGaW5hbE9i
amVjdCAgICAgICAgPSAxdSA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAx
dSA8PCAxOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0FycmF5Lgotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNGdW5jdGlvbiAgICAgICAgICAgPSAxdSA8PCAyOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYSBKU0Z1bmN0aW9uLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ4
QXJyYXkgICAgICAgICAgPSAxdSA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5
IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjSW50MTZBcnJheSAgICAgICAgID0gMXUgPDwgNDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNJbnQzMkFycmF5ICAgICAgICAgPSAxdSA8PCA1OyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gSW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4QXJyYXkgICAgICAgICA9IDF1IDw8IDY7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXUgPDwgNzsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQ4Q2xhbXBlZEFycmF5IG9yIG9uZSBvZiBpdHMgc3Vi
Y2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDE2QXJyYXkgICAg
ICAgID0gMXUgPDwgODsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBv
ZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMy
QXJyYXkgICAgICAgID0gMXUgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQzMkFycmF5
IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjRmxvYXQzMkFycmF5ICAgICAgID0gMXUgPDwgMTA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBV
aW50MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Zsb2F0NjRBcnJheSAgICAgICA9IDF1IDw8IDExOyAvLyBJdCdzIGRlZmlu
aXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNv
bnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGaW5hbE9iamVjdCAgICAgICAgPSAxdWxsIDw8IDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTRmluYWxPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0FycmF5ICAgICAgICAgICAgICA9IDF1bGwgPDwgMTsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgSlNBcnJheS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24g
ICAgICAgICAgID0gMXVsbCA8PCAyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0Z1bmN0aW9uLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ4QXJyYXkgICAgICAgICAgPSAxdWxs
IDw8IDM7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ4QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJj
bGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQxNkFycmF5ICAgICAg
ICAgPSAxdWxsIDw8IDQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBv
ZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJB
cnJheSAgICAgICAgID0gMXVsbCA8PCA1OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzJBcnJh
eSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY1VpbnQ4QXJyYXkgICAgICAgICA9IDF1bGwgPDwgNjsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IFVpbnQ4QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNVaW50OENsYW1wZWRBcnJheSAgPSAxdWxsIDw8IDc7IC8vIEl0J3MgZGVm
aW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQxNkFycmF5ICAgICAgICA9IDF1bGwg
PDwgODsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3Vi
Y2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDMyQXJyYXkgICAg
ICAgID0gMXVsbCA8PCA5OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDMyQXJyYXkgb3Igb25l
IG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9h
dDMyQXJyYXkgICAgICAgPSAxdWxsIDw8IDEwOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDE2
QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdWxsIDw8IDExOyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgogc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNUeXBlZEFycmF5VmlldyAgICAgPSBTcGVjSW50OEFycmF5IHwg
U3BlY0ludDE2QXJyYXkgfCBTcGVjSW50MzJBcnJheSB8IFNwZWNVaW50OEFycmF5IHwgU3BlY1Vp
bnQ4Q2xhbXBlZEFycmF5IHwgU3BlY1VpbnQxNkFycmF5IHwgU3BlY1VpbnQzMkFycmF5IHwgU3Bl
Y0Zsb2F0MzJBcnJheSB8IFNwZWNGbG9hdDY0QXJyYXk7Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0RpcmVjdEFyZ3VtZW50cyAgICA9IDF1IDw8IDEyOyAvLyBJdCdzIGRlZmluaXRl
bHkgYSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNTY29wZWRBcmd1bWVudHMgICAgPSAxdSA8PCAxMzsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
U2NvcGVkQXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
U3RyaW5nT2JqZWN0ICAgICAgID0gMXUgPDwgMTQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmlu
Z09iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjUmVnRXhwT2JqZWN0ICAg
ICAgID0gMXUgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5kIG5v
dCBhbnkgc3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMXUgPDwgMTY7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBvYmplY3QgYnV0IG5vdCBKU0ZpbmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9u
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBT
cGVjRmluYWxPYmplY3QgfCBTcGVjQXJyYXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJh
eVZpZXcgfCBTcGVjRGlyZWN0QXJndW1lbnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNT
dHJpbmdPYmplY3QgfCBTcGVjUmVnRXhwT2JqZWN0IHwgU3BlY09iamVjdE90aGVyOyAvLyBCaXRt
YXNrIHVzZWQgZm9yIHRlc3RpbmcgZm9yIGFueSBraW5kIG9mIG9iamVjdCBwcmVkaWN0aW9uLgot
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdJZGVudCAgICAgICAgPSAxdSA8
PCAxNzsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIGFuIGlkZW50aWZp
ZXIuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ1ZhciAgICAgICAgICA9
IDF1IDw8IDE4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5kIGl0J3Mgbm90IGFu
IGlkZW50aWZpZXIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RpcmVjdEFyZ3Vt
ZW50cyAgICA9IDF1bGwgPDwgMTI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIERpcmVjdEFyZ3VtZW50
cyBvYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1Njb3BlZEFyZ3VtZW50
cyAgICA9IDF1bGwgPDwgMTM7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBv
YmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAg
ICA9IDF1bGwgPDwgMTQ7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN0cmluZ09iamVjdC4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjUmVnRXhwT2JqZWN0ICAgICAgID0gMXVsbCA8PCAx
NTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgUmVnRXhwT2JqZWN0IChhbmQgbm90IGFueSBzdWJjbGFz
cyBvZiBSZWdFeHBPYmplY3QpLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNYXBP
YmplY3QgICAgICAgICAgPSAxdWxsIDw8IDE2OyAvLyBJdCdzIGRlZmluaXRlbHkgTWFwIG9iamVj
dCAoY2FuIGl0IGJlIGEgc3ViY2xhc3M/IEZJWE1FKS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjU2V0T2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNzsgLy8gSXQncyBkZWZpbml0
ZWx5IHMgU2V0IG9iamVjdCAoY2FuIGl0IGJlIGEgc3ViY2xhc3M/IEZJWE1FKS4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0T3RoZXIgICAgICAgID0gMXVsbCA8PCAxODsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIG9iamVjdCBidXQgbm90IEpTRmluYWxPYmplY3QsIEpTQXJy
YXksIG9yIEpTRnVuY3Rpb24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVj
dCAgICAgICAgICAgICA9IFNwZWNGaW5hbE9iamVjdCB8IFNwZWNBcnJheSB8IFNwZWNGdW5jdGlv
biB8IFNwZWNUeXBlZEFycmF5VmlldyB8IFNwZWNEaXJlY3RBcmd1bWVudHMgfCBTcGVjU2NvcGVk
QXJndW1lbnRzIHwgU3BlY1N0cmluZ09iamVjdCB8IFNwZWNSZWdFeHBPYmplY3QgfCBTcGVjTWFw
T2JqZWN0IHwgU3BlY1NldE9iamVjdCB8IFNwZWNPYmplY3RPdGhlcjsgLy8gQml0bWFzayB1c2Vk
IGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmplY3QgcHJlZGljdGlvbi4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRlbnQgICAgICAgID0gMXVsbCA8PCAxOTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcsIGFuZCBpdCdzIGFuIGlkZW50aWZpZXIuCitz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ1ZhciAgICAgICAgICA9IDF1bGwg
PDwgMjA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBub3QgYW4gaWRl
bnRpZmllci4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nICAgICAgICAg
ICAgID0gU3BlY1N0cmluZ0lkZW50IHwgU3BlY1N0cmluZ1ZhcjsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgSlNTdHJpbmcuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAg
ICAgICAgICA9IDF1IDw8IDE5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTeW1ib2wuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0NlbGxPdGhlciAgICAgICAgICA9IDF1IDw8IDIwOyAv
LyBJdCdzIGRlZmluaXRlbHkgYSBKU0NlbGwgYnV0IG5vdCBhIHN1YmNsYXNzIG9mIEpTT2JqZWN0
IGFuZCBkZWZpbml0ZWx5IG5vdCBhIEpTU3RyaW5nIG9yIGEgU3ltYm9sLiBGSVhNRTogVGhpcyBz
aG91bGRuJ3QgYmUgcGFydCBvZiBoZWFwLXRvcCBvciBieXRlY29kZS10b3AuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwNzgKK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjU3ltYm9sICAgICAgICAgICAgID0gMXVsbCA8PCAyMTsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgU3ltYm9sLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3Ro
ZXIgICAgICAgICAgPSAxdWxsIDw8IDIyOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0NlbGwgYnV0
IG5vdCBhIHN1YmNsYXNzIG9mIEpTT2JqZWN0IGFuZCBkZWZpbml0ZWx5IG5vdCBhIEpTU3RyaW5n
IG9yIGEgU3ltYm9sLiBGSVhNRTogVGhpcyBzaG91bGRuJ3QgYmUgcGFydCBvZiBoZWFwLXRvcCBv
ciBieXRlY29kZS10b3AuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzMwNzgKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQ2VsbCAgICAgICAgICAgICAg
ID0gU3BlY09iamVjdCB8IFNwZWNTdHJpbmcgfCBTcGVjU3ltYm9sIHwgU3BlY0NlbGxPdGhlcjsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdSA8PCAyMTsgLy8gSXQncyBkZWZpbml0ZWx5IGFu
IEludDMyIHdpdGggdmFsdWUgMCBvciAxLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNOb25Cb29sSW50MzIgICAgICAgPSAxdSA8PCAyMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDMyIHdpdGggdmFsdWUgb3RoZXIgdGhhbiAwIG9yIDEuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0Jvb2xJbnQzMiAgICAgICAgICA9IDF1bGwgPDwgMjM7IC8vIEl0J3MgZGVmaW5p
dGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXVsbCA8PCAyNDsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIEludDMyIHdpdGggdmFsdWUgb3RoZXIgdGhhbiAwIG9yIDEuCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0ludDMyT25seSAgICAgICAgICA9IFNwZWNCb29sSW50MzIgfCBT
cGVjTm9uQm9vbEludDMyOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIuCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0ludDUyT25seSAgICAgICAgICA9IDF1IDw8IDIzOyAvLyBJ
dCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4gSXQn
cyBhbHNvIGRlZmluaXRlbHkgbm90IGFuIEludDMyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAgPSAxdWxsIDw8IDI1OyAvLyBJdCdzIGRlZmluaXRl
bHkgYW4gSW50NTIgYW5kIHdlIGludGVuZCBpdCB0byB1bmJveCBpdC4gSXQncyBhbHNvIGRlZmlu
aXRlbHkgbm90IGFuIEludDMyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBbnlJ
bnQgICAgICAgICAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0ludDUyT25seTsgLy8gSXQncyBz
b21ldGhpbmcgdGhhdCB3ZSBjYW4gZG8gbWFjaGluZSBpbnQgYXJpdGhtZXRpYyBvbi4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQW55SW50QXNEb3VibGUgICAgID0gMXUgPDwgMjQ7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ1MiBhbmQgaXQncyBpbnNpZGUgYSBkb3VibGUuCi1z
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkludEFzRG91YmxlICAgICA9IDF1IDw8
IDI1OyAvLyBJdCdzIGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1i
ZXIgYW5kIGl0J3MgYSBkb3VibGUuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Fu
eUludEFzRG91YmxlICAgICA9IDF1bGwgPDwgMjY7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQ1
MiBhbmQgaXQncyBpbnNpZGUgYSBkb3VibGUuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY05vbkludEFzRG91YmxlICAgICA9IDF1bGwgPDwgMjc7IC8vIEl0J3MgZGVmaW5pdGVseSBu
b3QgYW4gSW50NTIgYnV0IGl0J3MgYSByZWFsIG51bWJlciBhbmQgaXQncyBhIGRvdWJsZS4KIHN0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlUmVhbCAgICAgICAgID0gU3BlY05v
bkludEFzRG91YmxlIHwgU3BlY0FueUludEFzRG91YmxlOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBu
b24tTmFOIGRvdWJsZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlUHVy
ZU5hTiAgICAgID0gMXUgPDwgMjY7IC8vIEl0J3MgZGVmaW5pdGVseSBhIE5hTiB0aGF0IGlzIHNh
ZSB0byB0YWcgKGkuZS4gcHVyZSkuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Rv
dWJsZUltcHVyZU5hTiAgICA9IDF1IDw8IDI3OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhh
dCBpcyB1bnNhZmUgdG8gdGFnIChpLmUuIGltcHVyZSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1bGwgPDwgMjg7IC8vIEl0J3MgZGVmaW5p
dGVseSBhIE5hTiB0aGF0IGlzIHNhZSB0byB0YWcgKGkuZS4gcHVyZSkuCitzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZUltcHVyZU5hTiAgICA9IDF1bGwgPDwgMjk7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIE5hTiB0aGF0IGlzIHVuc2FmZSB0byB0YWcgKGkuZS4gaW1wdXJlKS4K
IHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRG91YmxlTmFOICAgICAgICAgID0gU3Bl
Y0RvdWJsZVB1cmVOYU4gfCBTcGVjRG91YmxlSW1wdXJlTmFOOyAvLyBJdCdzIGRlZmluaXRlbHkg
c29tZSBraW5kIG9mIE5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNv
ZGVEb3VibGUgICAgID0gU3BlY0RvdWJsZVJlYWwgfCBTcGVjRG91YmxlUHVyZU5hTjsgLy8gSXQn
cyBlaXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZSwgYnV0IGl0J3MgZGVmaW5pdGVseSBu
b3QgaW1wdXJlIE5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbERvdWJs
ZSAgICAgICAgID0gU3BlY0RvdWJsZVJlYWwgfCBTcGVjRG91YmxlTmFOOyAvLyBJdCdzIGVpdGhl
ciBhIG5vbi1OYU4gb3IgYSBOYU4gZG91YmxlLgpAQCAtODEsMTIgKzgzLDEyIEBAIHN0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGUKIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRnVsbFJlYWxOdW1iZXIgICAgID0gU3BlY0FueUludCB8IFNwZWNEb3VibGVSZWFs
OyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZVJlYWwsIG9yIGEgSW50NTIuCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlTnVtYmVyICAgICA9IFNwZWNJ
bnQzMk9ubHkgfCBTcGVjQnl0ZWNvZGVEb3VibGU7IC8vIEl0J3MgZWl0aGVyIGFuIEludDMyIG9y
IGEgRG91YmxlLCBhbmQgdGhlIERvdWJsZSBjYW5ub3QgYmUgYW4gaW1wdXJlIE5hTi4KIHN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbE51bWJlciAgICAgICAgID0gU3BlY0FueUlu
dCB8IFNwZWNGdWxsRG91YmxlOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiwgSW50NTIsIG9yIGEg
RG91YmxlLCBhbmQgdGhlIERvdWJsZSBjYW4gYmUgaW1wdXJlIE5hTi4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXUgPDwgMjg7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhIEJvb2xlYW4uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY090
aGVyICAgICAgICAgICAgICA9IDF1IDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51
bGwgb3IgVW5kZWZpbmVkLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sZWFu
ICAgICAgICAgICAgPSAxdWxsIDw8IDMwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgor
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdWxs
IDw8IDMxOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVkLgogc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNaXNjICAgICAgICAgICAgICAgPSBTcGVjQm9v
bGVhbiB8IFNwZWNPdGhlcjsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBhIGJvb2xlYW4sIE51
bGwsIG9yIFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSGVhcFRv
cCAgICAgICAgICAgID0gU3BlY0NlbGwgfCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjTWlzYzsg
Ly8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3BlY0ludDUyT25seSBh
bmQgU3BlY0RvdWJsZUltcHVyZU5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
UHJpbWl0aXZlICAgICAgICAgID0gU3BlY1N0cmluZyB8IFNwZWNTeW1ib2wgfCBTcGVjQnl0ZWNv
ZGVOdW1iZXIgfCBTcGVjTWlzYzsgLy8gSXQncyBhbnkgbm9uLU9iamVjdCBKU1ZhbHVlLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNFbXB0eSAgICAgICAgICAgICAgPSAxdSA8PCAz
MDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KK3N0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMXVsbCA8PCAzMjsgLy8g
SXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KIHN0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVUb3AgICAgICAgID0gU3BlY0hlYXBUb3AgfCBTcGVjRW1w
dHk7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mk9u
bHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uIENvcnJlc3BvbmRzIHRvIHdoYXQgY291bGQgYmUg
Zm91bmQgaW4gYSBieXRlY29kZSBsb2NhbC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBT
cGVjRnVsbFRvcCAgICAgICAgICAgID0gU3BlY0J5dGVjb2RlVG9wIHwgU3BlY0Z1bGxOdW1iZXI7
IC8vIEl0IGNhbiBiZSBhbnl0aGluZyB0aGF0IGJ5dGVjb2RlIGNvdWxkIHNlZSBwbHVzIGV4b3Rp
YyBlbmNvZGluZ3Mgb2YgbnVtYmVycy4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNp
b24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC05NzcsNiArOTc3LDIyIEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
fQogCisgICAgY2FzZSBNYXBIYXNoOgorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3Bl
Y0ludDMyT25seSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVj
a2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShtX2dyYXBoLCBTcGVjQ2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElz
Tm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQm9v
bGVhbik7CisgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBJc0VtcHR5OgogICAgIGNhc2UgSXNK
U0FycmF5OgogICAgIGNhc2UgSXNVbmRlZmluZWQ6CkBAIC0yODgzLDcgKzI4OTksNyBAQCB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGUodW5zaWduZWQgaW5kZXhJbkJsb2NrKQogewog
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGluZGV4SW5CbG9jayk7Ci0gICAg
CisKICAgICBzdGFydEV4ZWN1dGluZygpOwogICAgIGV4ZWN1dGVFZGdlcyhub2RlKTsKICAgICBy
ZXR1cm4gZXhlY3V0ZUVmZmVjdHMoaW5kZXhJbkJsb2NrLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAy
MDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjUzOCw3ICsyNTM4LDM3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpY0NhbGwKICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
cmVzdWx0T3BlcmFuZCksIGdldChvcGVyYW5kKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICAgICAgCisKKyAgICBjYXNlIEpTTWFwR2V0SW50cmluc2ljOiB7CisgICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGluc2VydENoZWNrcygpOworICAgICAgICBOb2RlKiBtYXAgPSBnZXQo
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMCwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAg
Tm9kZSoga2V5ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zm
c2V0KSk7CisgICAgICAgIE5vZGUqIGhhc2ggPSBhZGRUb0dyYXBoKE1hcEhhc2gsIGtleSk7Cisg
ICAgICAgIE5vZGUqIGJ1Y2tldCA9IGFkZFRvR3JhcGgoR2V0TWFwQnVja2V0LCBFZGdlKG1hcCwg
TWFwT2JqZWN0VXNlKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAgICAgTm9kZSogcmVz
dWx0ID0gYWRkVG9HcmFwaChMb2FkRnJvbUpTTWFwQnVja2V0LCBPcEluZm8oKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pLCBidWNrZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9w
ZXJhbmQpLCByZXN1bHQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjYXNl
IEpTU2V0SGFzSW50cmluc2ljOgorICAgIGNhc2UgSlNNYXBIYXNJbnRyaW5zaWM6IHsKKyAgICAg
ICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaW5zZXJ0Q2hlY2tzKCk7CisgICAgICAgIE5vZGUqIG1hcE9y
U2V0ID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zmc2V0KSk7
CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgxLCBy
ZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChNYXBIYXNo
LCBrZXkpOworICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSBpbnRyaW5zaWMgPT0gSlNTZXRIYXNJ
bnRyaW5zaWMgPyBTZXRPYmplY3RVc2UgOiBNYXBPYmplY3RVc2U7CisgICAgICAgIE5vZGUqIGJ1
Y2tldCA9IGFkZFRvR3JhcGgoR2V0TWFwQnVja2V0LCBPcEluZm8oMCksIEVkZ2UobWFwT3JTZXQs
IHVzZUtpbmQpLCBFZGdlKGtleSksIEVkZ2UoaGFzaCkpOworICAgICAgICBOb2RlKiByZXN1bHQg
PSBhZGRUb0dyYXBoKElzTm9uRW1wdHlNYXBCdWNrZXQsIGJ1Y2tldCk7CisgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNp
b24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNDMsNiArMTI0MywyNyBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBMb2dTaGFkb3dDaGlja2VuVGFpbDoKICAg
ICAgICAgd3JpdGUoU2lkZVN0YXRlKTsKICAgICAgICAgcmV0dXJuOworCisgICAgY2FzZSBNYXBI
YXNoOgorICAgICAgICBkZWYoUHVyZVZhbHVlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgR2V0TWFwQnVja2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAg
IEVkZ2UmIG1hcEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgRWRnZSYga2V5RWRnZSA9
IG5vZGUtPmNoaWxkMigpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKE1hcEJ1Y2tldExvYywg
TWlzY0ZpZWxkcywgbWFwRWRnZSwga2V5RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAg
cmVhZChNaXNjRmllbGRzKTsKKyAgICAgICAgRWRnZSYgYnVja2V0RWRnZSA9IG5vZGUtPmNoaWxk
MSgpOworICAgICAgICBkZWYoSGVhcExvY2F0aW9uKEpTTWFwR2V0TG9jLCBNaXNjRmllbGRzLCBi
dWNrZXRFZGdlKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgcmVhZChNaXNjRmllbGRzKTsKKyAg
ICAgICAgZGVmKEhlYXBMb2NhdGlvbihNYXBIYXNMb2MsIE1pc2NGaWVsZHMsIG5vZGUtPmNoaWxk
MSgpKSwgTGF6eU5vZGUobm9kZSkpOworICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNh
c2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMjA1
NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODUsNiArMTg1LDEwIEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkKICAgICBjYXNlIEZvcmNlT1NSRXhpdDoKICAgICBjYXNlIENoZWNrV2F0Y2hkb2dU
aW1lcjoKICAgICBjYXNlIFN0cmluZ0Zyb21DaGFyQ29kZToKKyAgICBjYXNlIE1hcEhhc2g6Cisg
ICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAg
IGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CiAgICAgY2FzZSBDaGVja1RpZXJVcEluTG9vcDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRWRnZS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTg5
LDcgKzE4OSw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFkamFjZW5jeUxpc3Q7CiAg
ICAgCiAjaWYgVVNFKEpTVkFMVUU2NCkKLSAgICBzdGF0aWMgdWludDMyX3Qgc2hpZnQoKSB7IHJl
dHVybiA3OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50MzJfdCBzaGlmdCgpIHsgcmV0dXJu
IDg7IH0KICAgICAKICAgICBzdGF0aWMgdWludHB0cl90IG1ha2VXb3JkKE5vZGUqIG5vZGUsIFVz
ZUtpbmQgdXNlS2luZCwgUHJvb2ZTdGF0dXMgcHJvb2ZTdGF0dXMsIEtpbGxTdGF0dXMga2lsbFN0
YXR1cykKICAgICB7CkBAIC0xOTcsOCArMTk3LDIxIEBAIHByaXZhdGU6CiAgICAgICAgIHVpbnRw
dHJfdCBzaGlmdGVkVmFsdWUgPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSA8PCBzaGlm
dCgpOwogICAgICAgICBBU1NFUlQoKHNoaWZ0ZWRWYWx1ZSA+PiBzaGlmdCgpKSA9PSBiaXR3aXNl
X2Nhc3Q8dWludHB0cl90Pihub2RlKSk7CiAgICAgICAgIEFTU0VSVCh1c2VLaW5kID49IDAgJiYg
dXNlS2luZCA8IExhc3RVc2VLaW5kKTsKLSAgICAgICAgQVNTRVJUKChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAyKSA8PSAoc3RhdGljX2Nhc3Q8dWludHB0cl90PigyKSA8
PCBzaGlmdCgpKSk7Ci0gICAgICAgIHJldHVybiBzaGlmdGVkVmFsdWUgfCAoc3RhdGljX2Nhc3Q8
dWludHB0cl90Pih1c2VLaW5kKSA8PCAyKSB8IChERkc6OmRvZXNLaWxsKGtpbGxTdGF0dXMpIDw8
IDEpIHwgc3RhdGljX2Nhc3Q8dWludHB0cl90PihERkc6OmlzUHJvdmVkKHByb29mU3RhdHVzKSk7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oTGFzdFVzZUtp
bmQpIDw8IDIpIDwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkgPDwgc2hpZnQoKSksICJXZSBy
ZWx5IG9uIHRoaXMgYmVpbmcgdHJ1ZSB0byBub3QgY2xvYmJlciB0aGUgbm9kZSBwb2ludGVyLiIp
OworICAgICAgICB1aW50cHRyX3QgcmVzdWx0ID0gc2hpZnRlZFZhbHVlIHwgKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2lsbChraWxsU3RhdHVzKSA8
PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjppc1Byb3ZlZChwcm9vZlN0YXR1cykp
OworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgdW5pb24gVSB7
CisgICAgICAgICAgICAgICAgVSgpIHsgd29yZCA9IDA7IH0KKyAgICAgICAgICAgICAgICB1aW50
cHRyX3Qgd29yZDsKKyAgICAgICAgICAgICAgICBFZGdlIGVkZ2U7CisgICAgICAgICAgICB9IHU7
CisgICAgICAgICAgICB1LndvcmQgPSByZXN1bHQ7CisgICAgICAgICAgICBBU1NFUlQodS5lZGdl
LnVzZUtpbmRVbmNoZWNrZWQoKSA9PSB1c2VLaW5kKTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVk
Z2Uubm9kZSgpID09IG5vZGUpOworICAgICAgICAgICAgQVNTRVJUKHUuZWRnZS5wcm9vZlN0YXR1
c1VuY2hlY2tlZCgpID09IHByb29mU3RhdHVzKTsKKyAgICAgICAgICAgIEFTU0VSVCh1LmVkZ2Uu
a2lsbFN0YXR1c1VuY2hlY2tlZCgpID09IGtpbGxTdGF0dXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTU0NSw2ICsxNTQ1LDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCisgICAgICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAgICAgICAgaWYgKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICAgICAgZml4
RWRnZTxNYXBPYmplY3RVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBTZXRPYmplY3RVc2UpCisgICAgICAgICAgICAg
ICAgZml4RWRnZTxTZXRPYmplY3RVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgZml4RWRnZTxVbnR5cGVkVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICBm
aXhFZGdlPEludDMyVXNlPihub2RlLT5jaGlsZDMoKSk7CisgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgICAgICAgICBmaXhFZGdlPEtu
b3duQ2VsbFVzZT4obm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICAgICAgZml4RWRnZTxLbm93bkNl
bGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNh
c2UgTWFwSGFzaDoKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgYnJlYWs7CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgICAg
IC8vIEhhdmUgdGhlc2Ugbm8tb3AgY2FzZXMgaGVyZSB0byBlbnN1cmUgdGhhdCBub2JvZHkgZm9y
Z2V0cyB0byBhZGQgaGFuZGxlcnMgZm9yIG5ldyBvcGNvZGVzLgogICAgICAgICBjYXNlIFNldEFy
Z3VtZW50OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9jYXRpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDE1IEBAIHZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBMb2MKICAgICBjYXNlIFJlZ0V4cE9i
amVjdExhc3RJbmRleExvYzoKICAgICAgICAgb3V0LnByaW50KCJSZWdFeHBPYmplY3RMYXN0SW5k
ZXhMb2MiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwQnVja2V0TG9jOgorICAgICAg
ICBvdXQucHJpbnQoIk1hcEJ1Y2tldExvYyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBK
U01hcEdldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJKU01hcEdldExvYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYXBIYXNMb2M6CisgICAgICAgIG91dC5wcmludCgiTWFwSGFzTG9j
Iik7CisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdIZWFwTG9j
YXRpb24uaAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdIZWFwTG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsMTAgQEAgZW51bSBM
b2NhdGlvbktpbmQgewogICAgIFN0cnVjdHVyZUxvYywKICAgICBUeXBlZEFycmF5Qnl0ZU9mZnNl
dExvYywKICAgICBTdGFja0xvYywKLSAgICBTdGFja1BheWxvYWRMb2MKKyAgICBTdGFja1BheWxv
YWRMb2MsCisgICAgTWFwQnVja2V0TG9jLAorICAgIEpTTWFwR2V0TG9jLAorICAgIE1hcEhhc0xv
YwogfTsKIAogY2xhc3MgSGVhcExvY2F0aW9uIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyMSw2ICsxNDIxLDcgQEAgcHVibGljOgog
ICAgICAgICBjYXNlIFN0cmluZ1JlcGxhY2U6CiAgICAgICAgIGNhc2UgU3RyaW5nUmVwbGFjZVJl
Z0V4cDoKICAgICAgICAgY2FzZSBUb051bWJlcjoKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFw
QnVja2V0OgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw3ICszODgsMTIgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEdldFByb3BlcnR5RW51bWVyYXRv
ciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAogICAgIG1hY3JvKEdldEVudW1l
cmF0b3JTdHJ1Y3R1cmVQbmFtZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVSZXN1bHRKUykgXAog
ICAgIG1hY3JvKEdldEVudW1lcmF0b3JHZW5lcmljUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhUb0luZGV4U3RyaW5nLCBOb2RlUmVzdWx0SlMpCisg
ICAgbWFjcm8oVG9JbmRleFN0cmluZywgTm9kZVJlc3VsdEpTKSBcCisgICAgLyogTm9kZXMgZm9y
IEpTTWFwIGFuZCBKU1NldCAqLyBcCisgICAgbWFjcm8oTWFwSGFzaCwgTm9kZVJlc3VsdEludDMy
KSBcCisgICAgbWFjcm8oR2V0TWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhM
b2FkRnJvbUpTTWFwQnVja2V0LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhJc05vbkVtcHR5
TWFwQnVja2V0LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogCiAvLyBUaGlzIGVudW0gZ2VuZXJhdGVz
IGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGlkIGZvciBhbGwgTm9kZSB0eXBlcywKIC8vIGFu
ZCBpcyB1c2VkIGJ5IHRoZSBzdWJzZXF1ZW50IGVudW0gdG8gZmlsbCBvdXQgdGhlIGlkIChhcyBh
Y2Nlc3NlZCB2aWEgdGhlIE5vZGVJZE1hc2spLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2
ICs1MCw4IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52
aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgorI2luY2x1ZGUgIkpTU2V0LmgiCiAjaW5j
bHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZXBhdGNoLmgiCiAjaW5jbHVk
ZSAiU2NvcGVkQXJndW1lbnRzLmgiCkBAIC0xODExLDYgKzE4MTMsMzQgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dER5bmFtaWNWYQogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5w
dXQoc2NvcGUsIGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpLCBzbG90KTsKIH0K
IAoraW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hcEhhc2goRXhlY1N0YXRlKiBleGVj
LCBFbmNvZGVkSlNWYWx1ZSBpbnB1dCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIHJldHVybiBq
c01hcEhhc2goZXhlYywgdm0sIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVlOjpkZWNvZGUoaW5wdXQp
KSk7Cit9CisKK0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQo
RXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90
IGhhc2gpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNNYXA6OkJ1Y2tldFR5cGUqKiBidWNrZXQg
PSBqc0Nhc3Q8SlNNYXAqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIG5vcm1hbGl6ZU1hcEtleShK
U1ZhbHVlOjpkZWNvZGUoa2V5KSksIGhhc2gpOworICAgIGlmICghYnVja2V0KQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gKmJ1Y2tldDsKK30KKworSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCog
bWFwLCBFbmNvZGVkSlNWYWx1ZSBrZXksIGludDMyX3QgaGFzaCkKK3sKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
KyAgICBKU1NldDo6QnVja2V0VHlwZSoqIGJ1Y2tldCA9IGpzQ2FzdDxKU1NldCo+KG1hcCktPmZp
bmRCdWNrZXQoZXhlYywgbm9ybWFsaXplTWFwS2V5KEpTVmFsdWU6OmRlY29kZShrZXkpKSwgaGFz
aCk7CisgICAgaWYgKCFidWNrZXQpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biAqYnVja2V0OworfQorCiBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVv
cHRpbWl6YXRpb25Ob3coQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE9TUkV4aXRCYXNlKiBleGl0KQog
ewogICAgIC8vIEl0J3Mgc29ydCBvZiBwcmVmZXJhYmxlIHRoYXQgd2UgZG9uJ3QgR0Mgd2hpbGUg
aW4gaGVyZS4gQW55d2F5cywgZG9pbmcgc28gd291bGRuJ3QKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQy
LDYgKzE0MiwxMCBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkVuc3VyZUFycmF5CiBT
dHJpbmdJbXBsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlc29sdmVSb3BlKEV4ZWNTdGF0ZSos
IEpTU3RyaW5nKik7CiBKU1N0cmluZyogSklUX09QRVJBVElPTiBvcGVyYXRpb25TaW5nbGVDaGFy
YWN0ZXJTdHJpbmcoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiAKK2ludDMyX3QgSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYXBIYXNoKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGlucHV0KTsKK0pT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU01hcEZpbmRCdWNrZXQoRXhlY1N0YXRlKiwg
SlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOworSlNDZWxsKiBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNW
YWx1ZSwgaW50MzJfdCk7CisKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdTdHJp
bmdPYmplY3QoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBTdHJ1Y3R1cmUqKTsKIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZ09uQ2VsbChFeGVjU3RhdGUqLCBKU0NlbGwqKTsK
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25Ub1N0cmluZyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMjA1NDky
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwOCw2ICs3MDgsNyBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToKICAgICAgICAgY2FzZSBHZXRDbG9z
dXJlVmFyOgogICAgICAgICBjYXNlIEdldEZyb21Bcmd1bWVudHM6CisgICAgICAgIGNhc2UgTG9h
ZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgY2FzZSBUb051bWJlcjogewogICAgICAgICAgICAg
c2V0UHJlZGljdGlvbihtX2N1cnJlbnROb2RlLT5nZXRIZWFwUHJlZGljdGlvbigpKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNzM4LDYgKzczOSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIE1hcEhhc2g6CisgICAgICAgICAgICBz
ZXRQcmVkaWN0aW9uKFNwZWNJbnQzMk9ubHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQ2VsbE90
aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNr
ZXQ6CisgICAgICAgICAgICBzZXRQcmVkaWN0aW9uKFNwZWNCb29sZWFuKTsKKyAgICAgICAgICAg
IGJyZWFrOworCiAgICAgICAgIGNhc2UgR2V0UmVzdExlbmd0aDogewogICAgICAgICAgICAgc2V0
UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDIw
NTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBGdW5j
dGlvblVzZToKICAgICAgICAgY2FzZSBGaW5hbE9iamVjdFVzZToKICAgICAgICAgY2FzZSBSZWdF
eHBPYmplY3RVc2U6CisgICAgICAgIGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBjYXNlIFNl
dE9iamVjdFVzZToKICAgICAgICAgY2FzZSBPYmplY3RPck90aGVyVXNlOgogICAgICAgICBjYXNl
IFN0cmluZ0lkZW50VXNlOgogICAgICAgICBjYXNlIFN0cmluZ1VzZToKQEAgLTM1NSw2ICszNTcs
MTAgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2Ug
R2V0RHluYW1pY1ZhcjoKICAgICBjYXNlIFB1dER5bmFtaWNWYXI6CiAgICAgY2FzZSBSZXNvbHZl
U2NvcGU6CisgICAgY2FzZSBNYXBIYXNoOgorICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNh
c2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgY2FzZSBCb3R0b21WYWx1ZToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgIkRGR1Nsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSGFzaE1hcEltcGwuaCIK
ICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52
aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKQEAgLTQ3
MTksNiArNDcyMCw4MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDogeworICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBpbnB1dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisKKyAgICAgICAgSlNW
YWx1ZVJlZ3MgaW5wdXRSZWdzID0gaW5wdXQuanNWYWx1ZVJlZ3MoKTsKKworICAgICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIGlucHV0UmVncyk7CisgICAg
ICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQ
Uiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgR2V0TWFwQnVja2V0
OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG1hcCh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGtleSh0aGlzLCBub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCBoYXNoKHRoaXMsIG5vZGUtPmNoaWxkMygpKTsK
KyAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQ
UlJlZyBtYXBHUFIgPSBtYXAuZ3ByKCk7CisgICAgICAgIEpTVmFsdWVSZWdzIGtleVJlZ3MgPSBr
ZXkuanNWYWx1ZVJlZ3MoKTsKKyAgICAgICAgR1BSUmVnIGhhc2hHUFIgPSBoYXNoLmdwcigpOwor
ICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChu
b2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgc3Bl
Y3VsYXRlTWFwT2JqZWN0KG5vZGUtPmNoaWxkMSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlIGlm
IChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2JqZWN0VXNlKQorICAgICAgICAgICAg
c3BlY3VsYXRlU2V0T2JqZWN0KG5vZGUtPmNoaWxkMSgpLCBtYXBHUFIpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
TWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU01hcEZp
bmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlSZWdzLCBoYXNoR1BSKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQs
IHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlSZWdzLCBoYXNoR1BSKTsKKyAgICAgICAgbV9qaXQuZXhj
ZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFBheWxvYWQodGhpcyk7CisgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CisKKyAgICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1
Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXls
b2FkLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigp
OworCisgICAgICAgIGF1dG8gbm90QnVja2V0ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgYnVja2V0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFZhbHVlKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJ1Y2tldEdQUiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0
RGF0YUtleVZhbHVlPjo6b2Zmc2V0T2ZWYWx1ZSgpKSwgSlNWYWx1ZVJlZ3MocmVzdWx0VGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSKSk7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsK
KworICAgICAgICBub3RCdWNrZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCByZXN1bHRUYWdHUFIpOworICAgICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CisgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNh
c2UgSXNOb25FbXB0eU1hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
dWNrZXQodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgbV9qaXQuY29t
cGFyZVB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbTMy
KDApLCByZXN1bHRHUFIpOworICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgRmx1c2g6CiAgICAgICAgIGJyZWFr
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDkg
QEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29y
ZC5oIgogI2luY2x1ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAu
aCIKICNpbmNsdWRlICJKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCIKKyNpbmNsdWRlICJKU1Nl
dC5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlNldHVwVmFyYXJn
c0ZyYW1lLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCkBAIC00NjE1LDYgKzQ2
MTcsMTY4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBNYXBIYXNoOiB7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIGlucHV0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAg
ICAgR1BSUmVnIGlucHV0R1BSID0gaW5wdXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
KworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc3RyYWlnaHRIYXNoOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgYXV0byBpc05vdENlbGwg
PSBtX2ppdC5icmFuY2hJZk5vdENlbGwoaW5wdXRHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQu
YnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGlucHV0R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0
cmluZ1R5cGUpKSk7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoaW5wdXRHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCByZXN1bHRHUFIpOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhyZXN1bHRHUFIsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLCByZXN1bHRHUFIp
OworICAgICAgICBtX2ppdC51cnNoaWZ0NjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihT
dHJpbmdJbXBsOjpzX2ZsYWdDb3VudCksIHJlc3VsdEdQUik7CisgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikp
OworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIGlzTm90Q2Vs
bC5saW5rKCZtX2ppdCk7CisgICAgICAgIHN0cmFpZ2h0SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNo
SWZOb3ROdW1iZXIoaW5wdXRHUFIpKTsKKyAgICAgICAgc3RyYWlnaHRIYXNoLmFwcGVuZChtX2pp
dC5icmFuY2hJZkludDMyKEpTVmFsdWVSZWdzKGlucHV0R1BSKSkpOworICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBzdHJhaWdodEhhc2gubGluaygmbV9q
aXQpOworICAgICAgICBtX2ppdC5tb3ZlKGlucHV0R1BSLCByZXN1bHRHUFIpOworICAgICAgICBt
X2ppdC53YW5nc0ludDY0SGFzaChyZXN1bHRHUFIsIHRlbXBHUFIpOworICAgICAgICBkb25lLmFw
cGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAg
ICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25NYXBIYXNoLCByZXN1bHRHUFIsIGlucHV0R1BSKTsKKyAgICAgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOworICAgICAgICBpbnQzMlJl
c3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
ZXRNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgbWFwKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQga2V5KHRoaXMsIG5vZGUtPmNo
aWxkMigpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJPcGVyYW5kIGhhc2godGhpcywgbm9kZS0+
Y2hpbGQzKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgbWFzayh0aGlzKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IGluZGV4KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgYnVmZmVyKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3JhcnkgYnVja2V0KHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBoYXNoR1BSID0gaGFzaC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIG1hcEdQUiA9IG1hcC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIG1hc2tH
UFIgPSBtYXNrLmdwcigpOworICAgICAgICBHUFJSZWcgaW5kZXhHUFIgPSBpbmRleC5ncHIoKTsK
KyAgICAgICAgR1BSUmVnIGJ1ZmZlckdQUiA9IGJ1ZmZlci5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGtleUdQUiA9IGtleS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAg
ICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAgICAgICAg
ICAgIHNwZWN1bGF0ZU1hcE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1hcEdQUiwgbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSA/IEpTTWFwOjpvZmZzZXRPZkhhc2hN
YXBJbXBsKCkgOiBKU1NldDo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCgpKSwgYnVmZmVyR1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkNh
cGFjaXR5KCkpLCBtYXNrR1BSKTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhidWZmZXJHUFIsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSksIGJ1ZmZlckdQUik7CisgICAgICAgIG1f
aml0LnN1YjMyKFRydXN0ZWRJbW0zMigxKSwgbWFza0dQUik7CisgICAgICAgIG1faml0Lm1vdmUo
aGFzaEdQUiwgaW5kZXhHUFIpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBsb29w
ID0gbV9qaXQubGFiZWwoKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7
CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aENhc2VzOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbG9vcEFyb3VuZDsKKworICAgICAgICBtX2ppdC5h
bmQzMihtYXNrR1BSLCBpbmRleEdQUik7CisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkJhc2VJbmRleChidWZmZXJHUFIsIGluZGV4R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VGlt
ZXNFaWdodCksIGJ1Y2tldEdQUik7CisgICAgICAgIG1faml0Lm1vdmUoYnVja2V0R1BSLCByZXN1
bHRHUFIpOworICAgICAgICBhdXRvIG5vdFByZXNlbnRJblRhYmxlID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBidWNrZXRHUFIsIFRydXN0ZWRJ
bW1QdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpl
bXB0eVZhbHVlKCkpKTsKKyAgICAgICAgbG9vcEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgCisgICAgICAgICAgICBidWNrZXRHUFIsIFRydXN0ZWRJ
bW1QdHIoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+Ojpk
ZWxldGVkVmFsdWUoKSkpKTsKKworICAgICAgICBtX2ppdC5sb2FkNjQoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYnVja2V0R1BSLCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6
b2Zmc2V0T2ZLZXkoKSksIGJ1Y2tldEdQUik7CisKKyAgICAgICAgLy8gUGVyZm9ybSBPYmplY3Qu
aXMoKQorICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2g2NChNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIGJ1Y2tldEdQUiwga2V5R1BSKSk7IC8vIFRoZXkncmUgZGVmaW5pdGVseSB0aGUgc2Ft
ZSB2YWx1ZSwgd2UgZm91bmQgdGhlIGJ1Y2tldCB3ZSB3ZXJlIGxvb2tpbmcgZm9yIQorICAgICAg
ICBhdXRvIG9uZUlzbnRDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGJ1
Y2tldEdQUikpOworICAgICAgICAvLyBmaXJzdCBpcyBhIGNlbGwgaGVyZS4KKyAgICAgICAgbG9v
cEFyb3VuZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGtleUdQUikp
KTsKKyAgICAgICAgLy8gQm90aCBhcmUgY2VsbHMgaGVyZS4KKyAgICAgICAgbG9vcEFyb3VuZC5h
cHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBK
SVRDb21waWxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhlIGZpcnN0IGlz
IGEgc3RyaW5nIGhlcmUuCisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5j
aDgoSklUQ29tcGlsZXI6OkVxdWFsLAorICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
a2V5R1BSLCBKU0NlbGw6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmlu
Z1R5cGUpKSk7CisgICAgICAgIC8vIFRoZSBmaXJzdCBpcyBhIHN0cmluZywgYnV0IHRoZSBzZWNv
bmQgaXMgbm90LCB3ZSBjb250aW51ZSB0byBsb29wIGFyb3VuZC4KKyAgICAgICAgbG9vcEFyb3Vu
ZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBvbmVJc250Q2VsbC5saW5rKCZtX2pp
dCk7CisgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgZG9uZSBhIDY0LWJpdCBjb21wYXJlIGF0IHRo
aXMgcG9pbnQsIHNvIGlmIG9uZSBpcyBub3QgYSBudW1iZXIsIHRoZXkncmUgZGVmaW5pdGVseSBu
b3QgZXF1YWwuCisgICAgICAgIGxvb3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVt
YmVyKGJ1Y2tldEdQUikpOworICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdE51bWJlcihrZXlHUFIpKTsKKyAgICAgICAgLy8gQm90aCBhcmUgZGVmaW5pdGVseSBudW1i
ZXJzLiBJZiB3ZSBzZWUgYSBkb3VibGUsIHdlIGdvIHRvIHRoZSBzbG93IHBhdGguCisgICAgICAg
IHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIoYnVja2V0R1BSKSk7
CisgICAgICAgIHNsb3dQYXRoQ2FzZXMuYXBwZW5kKG1faml0LmJyYW5jaElmTm90SW50MzIoa2V5
R1BSKSk7CisgICAgICAgIAorICAgICAgICBsb29wQXJvdW5kLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbV9qaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBpbmRleEdQUik7CisgICAgICAgIG1faml0
Lmp1bXAoKS5saW5rVG8obG9vcCwgJm1faml0KTsKKworICAgICAgICBzbG93UGF0aENhc2VzLmxp
bmsoJm1faml0KTsKKyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMoaW5kZXhHUFIpOwor
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRH
UFIsIG1hcEdQUiwga2V5R1BSLCBoYXNoR1BSKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BS
LCBrZXlHUFIsIGhhc2hHUFIpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKGluZGV4
R1BSKTsKKyAgICAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKKyAgICAgICAgZG9uZS5hcHBl
bmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBub3RQcmVzZW50SW5UYWJsZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbVB0cihudWxscHRyKSwgcmVzdWx0R1BS
KTsKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdEJ1Y2tldCA9IG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQUik7CisgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFsdWUoKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGF1dG8gZG9uZSA9IG1faml0Lmp1bXAoKTsKKworICAgICAgICBub3RC
dWNrZXQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgcmVzdWx0R1BSKTsK
KyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBJc05vbkVtcHR5
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAg
ICAgICAgR1BSUmVnIGJ1Y2tldEdQUiA9IGJ1Y2tldC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgICAgICBtX2ppdC5jb21wYXJlUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgYnVja2V0R1BSLCBUcnVzdGVkSW1tMzIoMCksIHJlc3VsdEdQ
Uik7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpT
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAgIGNhc2UgSXNPYmplY3Q6IHsK
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIFJldXNlLCB2YWx1ZSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc0MDgsNiArNzQwOCwzNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGVSZWdFeHBPYmplCiAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KGVk
Z2UsIG9wZXJhbmQuZ3ByKCkpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVN
YXBPYmplY3QoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCkKK3sKKyAgICBzcGVjdWxhdGVDZWxsVHlw
ZShlZGdlLCBjZWxsLCBTcGVjTWFwT2JqZWN0LCBKU01hcFR5cGUpOworfQorCit2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSBlZGdlKQoreworICAgIGlmICghbmVl
ZHNUeXBlQ2hlY2soZWRnZSwgU3BlY01hcE9iamVjdCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7CisgICAgc3BlY3VsYXRl
TWFwT2JqZWN0KGVkZ2UsIG9wZXJhbmQuZ3ByKCkpOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlLCBHUFJSZWcgY2VsbCkKK3sKKyAgICBzcGVj
dWxhdGVDZWxsVHlwZShlZGdlLCBjZWxsLCBTcGVjU2V0T2JqZWN0LCBKU1NldFR5cGUpOworfQor
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTZXRPYmplY3QoRWRnZSBlZGdlKQorewor
ICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY1NldE9iamVjdCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wZXJhbmQodGhpcywgZWRnZSk7Cisg
ICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UsIG9wZXJhbmQuZ3ByKCkpOworfQorCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UgZWRnZSkKIHsKICAgICBp
ZiAoIW5lZWRzVHlwZUNoZWNrKGVkZ2UsIFNwZWNPYmplY3QgfCBTcGVjT3RoZXIpKQpAQCAtNzY5
NSw2ICs3NzIzLDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZShOb2RlKiwgRWQK
ICAgICBjYXNlIFJlZ0V4cE9iamVjdFVzZToKICAgICAgICAgc3BlY3VsYXRlUmVnRXhwT2JqZWN0
KGVkZ2UpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAg
c3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNldE9i
amVjdFVzZToKKyAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KGVkZ2UpOworICAgICAgICBicmVh
azsKICAgICBjYXNlIE9iamVjdE9yT3RoZXJVc2U6CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdE9y
T3RoZXIoZWRnZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzExLDYgKzEzMTEsMTIgQEAgcHVibGljOgogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAorICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oQ19KSVRPcGVyYXRpb25fRUNKWiBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMiwgR1BSUmVnIGFy
ZzMpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMiwgYXJnMyk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsU2V0UmVzdWx0KG9wZXJh
dGlvbiwgcmVzdWx0KTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKEpfSklUT3BlcmF0aW9uX0VKSk1pYyBvcGVyYXRpb24sIEpTVmFsdWVSZWdzIHJlc3VsdCwg
SlNWYWx1ZVJlZ3MgYXJnMSwgSlNWYWx1ZVJlZ3MgYXJnMiwgVHJ1c3RlZEltbVB0ciBtYXRoSUMp
CiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMS5n
cHIoKSwgYXJnMi5ncHIoKSwgbWF0aElDKTsKQEAgLTE2OTEsNiArMTY5NywxMiBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgfQogCisgICAgSklU
Q29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBB
cmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFNl
dFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihaX0pJVE9wZXJhdGlvbl9FSlpaIG9wZXJhdGlvbiwgR1BSUmVnIHJl
c3VsdCwgR1BSUmVnIGFyZzEsIHVuc2lnbmVkIGFyZzIsIHVuc2lnbmVkIGFyZzMpCiAgICAgewog
ICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgVHJ1c3RlZElt
bTMyKGFyZzIpLCBUcnVzdGVkSW1tMzIoYXJnMykpOwpAQCAtMTczOSw2ICsxNzUxLDE4IEBAIHB1
YmxpYzoKICAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJhdGlvbl9FQ0paIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVSZWdzIGFyZzIsIEdQUlJlZyBhcmczKQor
ICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFy
ZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBhcmczKTsKKyAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKworICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBH
UFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0
dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzEucGF5bG9h
ZEdQUigpLCBhcmcxLnRhZ0dQUigpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1
bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljIG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3Mg
cmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVncyBhcmcyLCBUcnVzdGVkSW1tUHRy
IG1hdGhJQykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxvYWRHUFIoKSwgYXJnMS50YWdHUFIoKSwg
YXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCksIG1hdGhJQyk7CkBAIC0yNjc5LDYgKzI3
MDMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3VsYXRlRmluYWxPYmplY3QoRWRnZSk7CiAg
ICAgdm9pZCBzcGVjdWxhdGVSZWdFeHBPYmplY3QoRWRnZSwgR1BSUmVnIGNlbGwpOwogICAgIHZv
aWQgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2Jq
ZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UsIEdQUlJlZyBjZWxs
KTsKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0
ZVNldE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3RP
ck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nKEVkZ2UgZWRnZSwgR1BSUmVn
IGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5nSWRlbnRBbmRMb2FkU3RvcmFnZShFZGdl
IGVkZ2UsIEdQUlJlZyBzdHJpbmcsIEdQUlJlZyBzdG9yYWdlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQs
NiArOTQsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFVzZQogICAg
IGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICBvdXQucHJpbnQoIlJlZ0V4cE9iamVjdCIp
OwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgIG91dC5w
cmludCgiTWFwT2JqZWN0VXNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNldE9iamVj
dFVzZToKKyAgICAgICAgb3V0LnByaW50KCJTZXRPYmplY3RVc2UiKTsKKyAgICAgICAgcmV0dXJu
OwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAgICAgICAgb3V0LnByaW50KCJPYmplY3RP
ck90aGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBlbnVtIFVz
ZUtpbmQgewogICAgIEtub3duU3RyaW5nVXNlLAogICAgIEtub3duUHJpbWl0aXZlVXNlLCAvLyBU
aGlzIGJpemFycmUgdHlwZSBhcmlzZXMgZm9yIG9wX3N0cmNhdCwgd2hpY2ggaGFzIGEgYnl0ZWNv
ZGUgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBvbmx5IHNlZSBwcmltaXRpdmVzIChpLmUuIG5vdCBv
YmplY3RzKS4KICAgICBTeW1ib2xVc2UsCisgICAgTWFwT2JqZWN0VXNlLAorICAgIFNldE9iamVj
dFVzZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2Us
CiAgICAgTm90U3RyaW5nVmFyVXNlLApAQCAtMTM0LDYgKzEzNiwxMCBAQCBpbmxpbmUgU3BlY3Vs
YXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAgICAgIHJldHVybiBTcGVjSGVhcFRvcCAm
IH5TcGVjT2JqZWN0OwogICAgIGNhc2UgU3ltYm9sVXNlOgogICAgICAgICByZXR1cm4gU3BlY1N5
bWJvbDsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgcmV0dXJuIFNwZWNNYXBPYmpl
Y3Q7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgIHJldHVybiBTcGVjU2V0T2JqZWN0
OwogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAgICAgICByZXR1cm4gU3BlY1N0cmluZ09i
amVjdDsKICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNlOgpAQCAtMjIxLDYgKzIyNyw4
IEBAIGlubGluZSBib29sIGlzQ2VsbChVc2VLaW5kIGtpbmQpCiAgICAgY2FzZSBTeW1ib2xVc2U6
CiAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVj
dFVzZToKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICBjYXNlIFNldE9iamVjdFVzZToKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhl
YXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw4IEBACiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJh
Y3RIZWFwLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBlLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIK
KyNpbmNsdWRlICJKU1NldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAK
QEAgLTEwMSw3ICsxMDMsMTMgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAg
IG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVjdHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkp
IFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9i
amVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0dXJlX3Byb3RvdHlwZSwgU3RydWN0dXJl
Ojpwcm90b3R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwg
U3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQorICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1
Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSBcCisgICAgbWFjcm8oSlNN
YXBfaGFzaE1hcEltcGwsIEpTTWFwOjpvZmZzZXRPZkhhc2hNYXBJbXBsKCkpIFwKKyAgICBtYWNy
byhKU1NldF9oYXNoTWFwSW1wbCwgSlNTZXQ6Om9mZnNldE9mSGFzaE1hcEltcGwoKSkgXAorICAg
IG1hY3JvKEhhc2hNYXBJbXBsX2NhcGFjaXR5LCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQ2FwYWNpdHkoKSkgXAorICAgIG1hY3JvKEhh
c2hNYXBJbXBsX2J1ZmZlciwgIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNrZXRf
dmFsdWUsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9m
VmFsdWUoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNrZXRfa2V5LCBIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpKSBcCiAKICNkZWZpbmUgRk9S
X0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3JvKSBcCiAgICAgbWFjcm8oRGlyZWN0QXJn
dW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpLCBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw2ICsx
ODEsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBJbjoKICAgICBjYXNlIElzSlNBcnJheToKKyAgICBj
YXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKICAgICBjYXNlIElzRW1w
dHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBjYXNlIElzQm9vbGVhbjoKQEAgLTQyNSw2
ICs0MjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAg
ICAgICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBT
dHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIFN5bWJvbFVzZToK
KyAgICAgICAgICAgICAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAgICAgICAgICAgICAgICBjYXNl
IFNldE9iamVjdFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEZpbmFsT2JqZWN0VXNlOgogICAg
ICAgICAgICAgICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2Ug
Tm90Q2VsbFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsNyBAQAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgi
CiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJKU01hcC5oIgog
I2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCkBAIC04OTgsNiArODk5LDE4IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNKU0FycmF5OgogICAgICAgICAgICAgY29tcGlsZUlz
SlNBcnJheSgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTWFwSGFzaDoKKyAg
ICAgICAgICAgIGNvbXBpbGVNYXBIYXNoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxlR2V0TWFwQnVja2V0KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAg
ICAgICAgICAgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgICAgICBjb21waWxl
SXNOb25FbXB0eU1hcEJ1Y2tldCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
SXNPYmplY3Q6CiAgICAgICAgICAgICBjb21waWxlSXNPYmplY3QoKTsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNjI3NCw2ICs2Mjg3LDIyOSBAQCBwcml2YXRlOgogICAgICAgICBzZXRCb29sZWFu
KG1fb3V0LnBoaShJbnQzMiwgbm90Q2VsbFJlc3VsdCwgY2VsbFJlc3VsdCkpOwogICAgIH0KIAor
ICAgIHZvaWQgY29tcGlsZU1hcEhhc2goKQorICAgIHsKKyAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBpc0Nl
bGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm90Q2VsbCA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc3RyYWlnaHRIYXNoID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNOdW1iZXJDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm9uRW1wdHlTdHJpbmdDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2so
KTsKKworICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICBpc0NlbGwodmFsdWUsIHBy
b3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShu
b3RDZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRU
byhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAgICAgICBMVmFsdWUgaXNTdHJpbmcgPSBt
X291dC5lcXVhbChtX291dC5sb2FkOFplcm9FeHQzMih2YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlw
ZUluZm9UeXBlKSwgbV9vdXQuY29uc3RJbnQzMihTdHJpbmdUeXBlKSk7CisgICAgICAgIG1fb3V0
LmJyYW5jaCgKKyAgICAgICAgICAgIGlzU3RyaW5nLCB1bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5z
dXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2Fz
ZSwgbm9uRW1wdHlTdHJpbmdDYXNlKTsKKyAgICAgICAgTFZhbHVlIHN0cmluZ0ltcGwgPSBtX291
dC5sb2FkUHRyKHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5nX3ZhbHVlKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJ
bnRQdHIoMCkpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KG5vbkVtcHR5U3RyaW5nQ2FzZSkp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkVtcHR5U3RyaW5nQ2FzZSwgbm90Q2VsbCk7
CisgICAgICAgIExWYWx1ZSBoYXNoID0gbV9vdXQubFNocihtX291dC5sb2FkMzIoc3RyaW5nSW1w
bCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFncyksIG1fb3V0LmNvbnN0SW50MzIoU3Ry
aW5nSW1wbDo6c19mbGFnQ291bnQpKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgbm9uRW1wdHlT
dHJpbmdIYXNoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhhc2gpOworICAgICAgICBtX291dC5icmFu
Y2gobV9vdXQuZXF1YWwoaGFzaCwgbV9vdXQuY29uc3RJbnQzMigwKSksCisgICAgICAgICAgICBy
YXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOworCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG5vdENlbGwsIGlzTnVtYmVyQ2FzZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgK
KyAgICAgICAgICAgIGlzTnVtYmVyKHZhbHVlKSwgdW5zdXJlKGlzTnVtYmVyQ2FzZSksIHVuc3Vy
ZShzdHJhaWdodEhhc2gpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhpc051bWJlckNhc2Us
IHN0cmFpZ2h0SGFzaCk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzSW50
MzIodmFsdWUpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSwgdW5zdXJlKHNsb3dDYXNlKSk7CisKKyAg
ICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyYWlnaHRIYXNoLCBzbG93Q2FzZSk7CisgICAgICAgIC8v
IGtleSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIExWYWx1ZSBrZXkgPSB2YWx1ZTsKKyAgICAg
ICAgTFZhbHVlIHRlbXAgPSBrZXk7CisgICAgICAgIHRlbXAgPSBtX291dC5zaGwodGVtcCwgbV9v
dXQuY29uc3RJbnQzMigzMikpOworICAgICAgICB0ZW1wID0gbV9vdXQuYml0Tm90KHRlbXApOwor
ICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChr
ZXkgPj4gMjIpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNo
cih0ZW1wLCBtX291dC5jb25zdEludDMyKDIyKSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhv
cihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMTMpOworICAgICAgICB0
ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50
MzIoMTMpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5
ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOwor
ICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291
dC5jb25zdEludDMyKDgpKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYml0WG9yKGtleSwgdGVtcCk7
CisgICAgICAgIC8vIGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICB0ZW1wID0ga2V5OworICAg
ICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMykpOworICAgICAg
ICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4g
MTUpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1w
LCBtX291dC5jb25zdEludDMyKDE1KSk7CisgICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXks
IHRlbXApOworICAgICAgICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgICAgICB0ZW1wID0g
a2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMjcp
KTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9v
dXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICAg
ICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmxTaHIodGVtcCwgbV9vdXQuY29u
c3RJbnQzMigzMSkpOworICAgICAgICBrZXkgPSBtX291dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAg
ICAgICAga2V5ID0gbV9vdXQuY2FzdFRvSW50MzIoa2V5KTsKKworICAgICAgICBWYWx1ZUZyb21C
bG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGtleSk7CisgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGlu
dWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hv
cigKKyAgICAgICAgICAgIHZtQ2FsbChJbnQzMiwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk1h
cEhhc2gpLCBtX2NhbGxGcmFtZSwgdmFsdWUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQp
OworICAgICAgICBzZXRJbnQzMihtX291dC5waGkoSW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQsIG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGls
ZUdldE1hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBsb29wU3RhcnQgPSBt
X291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBsb29wQXJvdW5kID0gbV9vdXQu
bmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RQcmVzZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Js
b2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEVtcHR5VmFsdWUgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBub3REZWxldGVkVmFsdWUgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RCaXRFcXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleU5vdENlbGwgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc0NlbGwgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJlQ2VsbHMgPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc1N0cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7
CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlzTnVtYmVyID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYm90aEFyZU51bWJlcnMgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc0ludDMyID0gbV9vdXQubmV3QmxvY2so
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsK
KworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0Jl
Zm9yZShsb29wU3RhcnQpOworCisgICAgICAgIExWYWx1ZSBtYXA7CisgICAgICAgIGlmIChtX25v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmplY3RVc2UpCisgICAgICAgICAgICBtYXAg
PSBsb3dNYXBPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIGVsc2UgaWYgKG1fbm9k
ZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVzZSkKKyAgICAgICAgICAgIG1hcCA9
IGxvd1NldE9iamVjdChtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgICAgICBMVmFsdWUga2V5ID0g
bG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgTFZhbHVlIGhhc2ggPSBsb3dJ
bnQzMihtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAgICBMVmFsdWUgaGFzaE1hcEltcGwgPSBt
X291dC5sb2FkUHRyKG1hcCwgbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0
VXNlID8gbV9oZWFwcy5KU01hcF9oYXNoTWFwSW1wbCA6IG1faGVhcHMuSlNTZXRfaGFzaE1hcElt
cGwpOworICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9vdXQubG9hZFB0cihoYXNoTWFwSW1wbCwg
bV9oZWFwcy5IYXNoTWFwSW1wbF9idWZmZXIpOworICAgICAgICBMVmFsdWUgbWFzayA9IG1fb3V0
LnN1YihtX291dC5sb2FkMzIoaGFzaE1hcEltcGwsIG1faGVhcHMuSGFzaE1hcEltcGxfY2FwYWNp
dHkpLCBtX291dC5pbnQzMk9uZSk7CisKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW5kZXhTdGFy
dCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQpOwor
CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFydCwgbm90RW1wdHlWYWx1ZSk7CisgICAg
ICAgIExWYWx1ZSB1bm1hc2tlZEluZGV4ID0gbV9vdXQucGhpKEludDMyLCBpbmRleFN0YXJ0KTsK
KyAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuYml0QW5kKG1hc2ssIHVubWFza2VkSW5kZXgp
OworICAgICAgICBMVmFsdWUgaGFzaE1hcEJ1Y2tldCA9IG1fb3V0LmxvYWQ2NChtX291dC5iYXNl
SW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVtYmVyKCksIGJ1ZmZlciwgbV9vdXQuemVy
b0V4dChpbmRleCwgSW50NjQpLCBTY2FsZUVpZ2h0KSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IGJ1Y2tldFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNoTWFwQnVja2V0KTsKKyAgICAgICAgbV9v
dXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNrZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1
ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobm90UHJlc2VudEluVGFibGUpLCB1bnN1cmUobm90
RW1wdHlWYWx1ZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5v
dERlbGV0ZWRWYWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5lcXVhbChoYXNoTWFw
QnVja2V0LCBtX291dC5jb25zdEludFB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5Pj46OmRlbGV0ZWRWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUo
bG9vcEFyb3VuZCksIHVuc3VyZShub3REZWxldGVkVmFsdWUpKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhub3REZWxldGVkVmFsdWUsIG5vdEJpdEVxdWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1
Y2tldEtleSA9IG1fb3V0LmxvYWQ2NChoYXNoTWFwQnVja2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNr
ZXRfa2V5KTsKKyAgICAgICAgLy8gUGVyZm9ybSBPYmplY3QuaXMoKQorICAgICAgICBtX291dC5i
cmFuY2gobV9vdXQuZXF1YWwoa2V5LCBidWNrZXRLZXkpLAorICAgICAgICAgICAgdW5zdXJlKGNv
bnRpbnVhdGlvbiksIHVuc3VyZShub3RCaXRFcXVhbCkpOworCisgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG5vdEJpdEVxdWFsLCBidWNrZXRLZXlJc0NlbGwpOworICAgICAgICBtX291dC5icmFuY2go
aXNDZWxsKGJ1Y2tldEtleSksCisgICAgICAgICAgICB1bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwg
dW5zdXJlKGJ1Y2tldEtleU5vdENlbGwpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhidWNr
ZXRLZXlJc0NlbGwsIGJvdGhBcmVDZWxscyk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc0NlbGwo
a2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShib3RoQXJlQ2VsbHMpLCB1bnN1cmUobG9vcEFyb3Vu
ZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVDZWxscywgYnVja2V0S2V5SXNT
dHJpbmcpOworICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoYnVja2V0S2V5KSwKKyAgICAg
ICAgICAgIHVuc3VyZShidWNrZXRLZXlJc1N0cmluZyksIHVuc3VyZShsb29wQXJvdW5kKSk7CisK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENl
bGwpOworICAgICAgICBtX291dC5icmFuY2goaXNTdHJpbmcoa2V5KSwKKyAgICAgICAgICAgIHVu
c3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYnVja2V0S2V5Tm90Q2VsbCwgYnVja2V0S2V5SXNOdW1iZXIpOworICAgICAgICBtX291
dC5icmFuY2goaXNOb3ROdW1iZXIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShsb29w
QXJvdW5kKSwgdW5zdXJlKGJ1Y2tldEtleUlzTnVtYmVyKSk7CisKKyAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oYnVja2V0S2V5SXNOdW1iZXIsIGJvdGhBcmVOdW1iZXJzKTsKKyAgICAgICAgbV9vdXQu
YnJhbmNoKGlzTm90TnVtYmVyKGtleSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCks
IHVuc3VyZShib3RoQXJlTnVtYmVycykpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhB
cmVOdW1iZXJzLCBidWNrZXRLZXlJc0ludDMyKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90
SW50MzIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShi
dWNrZXRLZXlJc0ludDMyKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJ
bnQzMiwgbG9vcEFyb3VuZCk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyKGtleSks
CisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3BBcm91bmQsIHNsb3dQYXRoKTsKKyAgICAgICAgbV9v
dXQuYWRkSW5jb21pbmdUb1BoaSh1bm1hc2tlZEluZGV4LCBtX291dC5hbmNob3IobV9vdXQuYWRk
KGluZGV4LCBtX291dC5pbnQzMk9uZSkpKTsKKyAgICAgICAgbV9vdXQuanVtcChsb29wU3RhcnQp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RQcmVzZW50SW5UYWJsZSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dQYXRoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbChwb2ludGVyVHlwZSgpLAorICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+
Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1
Y2tldCA6IG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCksIG1fY2FsbEZyYW1lLCBtYXAsIGtleSwg
aGFzaCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8obm90UHJlc2VudEluVGFibGUsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIFZh
bHVlRnJvbUJsb2NrIG5vdFByZXNlbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3RJ
bnRQdHIoMCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldE1hcEJ1
Y2tldChtX291dC5waGkocG9pbnRlclR5cGUoKSwgYnVja2V0UmVzdWx0LCBzbG93UGF0aFJlc3Vs
dCwgbm90UHJlc2VudFJlc3VsdCkpOworICAgIH0KKworICAgIHZvaWQgY29tcGlsZUxvYWRGcm9t
SlNNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgTFZhbHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1
Y2tldChtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRp
b24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBoYXNCdWNrZXQgPSBt
X291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0
ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZp
bmVkKCkpKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwg
bV9vdXQuY29uc3RJbnRQdHIoMCkpLAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiks
IHVuc3VyZShoYXNCdWNrZXQpKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGhhc0J1Y2tldCwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9t
QmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQs
IG1faGVhcHMuSGFzaE1hcEJ1Y2tldF92YWx1ZSkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4
dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhpKEludDY0LCBub0J1Y2tldFJlc3VsdCwg
YnVja2V0UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9pZCBjb21waWxlSXNOb25FbXB0eU1hcEJ1
Y2tldCgpCisgICAgeworICAgICAgICBMVmFsdWUgYnVja2V0ID0gbG93TWFwQnVja2V0KG1fbm9k
ZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQubm90RXF1YWwoYnVj
a2V0LCBtX291dC5jb25zdEludFB0cigwKSk7CisgICAgICAgIHNldEJvb2xlYW4ocmVzdWx0KTsK
KyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVJc09iamVjdE9yTnVsbCgpCiAgICAgewogICAgICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpAQCAtOTk4Miw2ICsxMDIxOCwyMCBAQCBwcml2YXRl
OgogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgcmVzdWx0KTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBMVmFsdWUgbG93TWFwT2JqZWN0KEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAg
ICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBMVmFsdWUgbG93U2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7Cisg
ICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVT
ZXRPYmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAg
ICAgCiAgICAgTFZhbHVlIGxvd1N0cmluZyhFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1v
ZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICB7CkBAIC0xMDEwNSw2
ICsxMDM1NSwxNyBAQCBwcml2YXRlOgogICAgICAgICBzZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCBy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIExWYWx1ZSBsb3dN
YXBCdWNrZXQoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1
ZSA9IG1fbWFwQnVja2V0VmFsdWVzLmdldChlZGdlLm5vZGUoKSk7CisgICAgICAgIGlmIChpc1Zh
bGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZS52YWx1ZSgpOworICAgICAgICAK
KyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwoZWRnZSk7CisgICAgICAgIHNldFN0b3Jh
Z2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
ICAgIAogICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvSW50MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFs
dWUpCiAgICAgewpAQCAtMTA0MDgsNiArMTA2NjksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBSZWdFeHBPYmplY3RVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRn
ZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXBPYmplY3RVc2U6CisgICAg
ICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3Qo
ZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6CiAgICAg
ICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEw
NzM2LDYgKzExMDAzLDI4IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzcGVjdWxhdGVSZWdF
eHBPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CiAgICAgfQorCisgICAgdm9pZCBzcGVjdWxh
dGVNYXBPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKKyAgICB7CisgICAgICAgIEZUTF9U
WVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjTWFw
T2JqZWN0LCBpc05vdFR5cGUoY2VsbCwgSlNNYXBUeXBlKSk7CisgICAgfQorCisgICAgdm9pZCBz
cGVjdWxhdGVNYXBPYmplY3QoRWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgc3BlY3VsYXRlTWFw
T2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRl
U2V0T2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCisgICAgeworICAgICAgICBGVExfVFlQ
RV9DSEVDSygKKyAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwgZWRnZSwgU3BlY1NldE9i
amVjdCwgaXNOb3RUeXBlKGNlbGwsIEpTU2V0VHlwZSkpOworICAgIH0KKworICAgIHZvaWQgc3Bl
Y3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIHNwZWN1bGF0ZVNldE9i
amVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxh
dGVTdHJpbmcoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkKICAgICB7CkBAIC0xMTUwNCw2ICsxMTc5
MywxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLnNldChub2Rl
LCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hCbG9jaykpOwogICAgIH0KKyAgICB2b2lk
IHNldE1hcEJ1Y2tldChOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBt
X21hcEJ1Y2tldFZhbHVlcy5zZXQobm9kZSwgTG93ZXJlZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdo
QmxvY2spKTsKKyAgICB9CiAgICAgdm9pZCBzZXREb3VibGUoTm9kZSogbm9kZSwgTFZhbHVlIHZh
bHVlKQogICAgIHsKICAgICAgICAgbV9kb3VibGVWYWx1ZXMuc2V0KG5vZGUsIExvd2VyZWROb2Rl
VmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CkBAIC0xMTUzNyw2ICsxMTgzMCwxMCBAQCBwcml2
YXRlOgogICAgIHsKICAgICAgICAgc2V0U3RvcmFnZShtX25vZGUsIHZhbHVlKTsKICAgICB9Cisg
ICAgdm9pZCBzZXRNYXBCdWNrZXQoTFZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgc2V0TWFw
QnVja2V0KG1fbm9kZSwgdmFsdWUpOworICAgIH0KICAgICB2b2lkIHNldERvdWJsZShMVmFsdWUg
dmFsdWUpCiAgICAgewogICAgICAgICBzZXREb3VibGUobV9ub2RlLCB2YWx1ZSk7CkBAIC0xMTcy
MCw2ICsxMjAxNyw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVW
YWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExvd2VyZWROb2RlVmFs
dWU+IG1fYm9vbGVhblZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVl
PiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9tYXBCdWNrZXRWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4g
bV9kb3VibGVWYWx1ZXM7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0
IHByZXZlbnRzIEIzIGZyb20gaGF2aW5nIHRvIGRvIENTRSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50
cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5j
cHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1i
bHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI2LDYgKzYyNiw1MiBAQCB2b2lkIEFz
c2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2FsCiAgICAgICAgIH0pOwogfQogCisjaWYg
VVNFKEpTVkFMVUU2NCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjp3YW5nc0ludDY0SGFzaChHUFJS
ZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIEdQUlJlZyBpbnB1dCA9
IGlucHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgbW92ZShp
bnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7
CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8v
IGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICB1cnNo
aWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7CisgICAgeG9yNjQoc2NyYXRjaCwgaW5w
dXQpOworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRj
aCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEzKSwgc2NyYXRjaCk7CisgICAgbm90NjQo
c2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5
ID4+IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIHVyc2hpZnQ2NChUcnVzdGVk
SW1tMzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBr
ZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2
NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsK
KyAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7Cisg
ICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0
Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkgPDwgMjcpOworICAgIG1vdmUoaW5wdXQs
IHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMigyNyksIHNjcmF0Y2gpOworICAg
IG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkg
Xj0gKGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0
KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsK
KworICAgIC8vIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KQorICAgIHZvaWQq
IG1hc2sgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oVUlOVF9N
QVgpKTsKKyAgICBhbmQ2NChUcnVzdGVkSW1tUHRyKG1hc2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9
CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRp
ZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJs
eUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSklUQ29kZTo6Tm9uZSB8fCBKSVRDb2RlOjppc0Jhc2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29k
ZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIENvZGVC
bG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2RlQmxvY2s7IH0KICAgICBWTSogdm0oKSB7
IHJldHVybiBtX3ZtOyB9CiAgICAgQXNzZW1ibGVyVHlwZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVy
biBtX2Fzc2VtYmxlcjsgfQpAQCAtMTUyOCw2ICsxNTI4LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
ZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xhc3NUeXBlPihyZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIo
c3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBz
bG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFz
c0luZm8oKSksIEFkZHJlc3MocmVzdWx0R1BSLCBKU0Rlc3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpKTsKICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIHZvaWQgd2Fu
Z3NJbnQ2NEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5k
aWYKICAgICAKIHByb3RlY3RlZDoKICAgICBWTSogbV92bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA1
LDYgKzIwNSw3IEBAIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGUKIHR5
cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRVN0WlopKEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QsIGludDMyX3QpOwogdHlwZWRlZiBKU0NlbGwqIChK
SVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0
eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNfSklUT3BlcmF0aW9uX0VKc2NJKShFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgVW5pcXVlZFN0cmluZ0ltcGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAo
SklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUNKWikoRXhlY1N0YXRlKiwgSlNDZWxsKiwg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRlZiBkb3VibGUgKEpJVF9PUEVSQVRJT04g
KkRfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBlZGVmIGRvdWJsZSAoSklUX09QRVJBVElP
TiAqRF9KSVRPcGVyYXRpb25fRykoSlNHbG9iYWxPYmplY3QqKTsKIHR5cGVkZWYgZG91YmxlIChK
SVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1bGVBbmFseXplci5jcHAJKHJl
dmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5h
bHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiBNb2R1bGVBbmFseXplcjo6TW9kdWxlQW5hbHl6ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgIDogbV92bSgmZXhlYy0+dm0oKSkK
LSAgICAsIG1fbW9kdWxlUmVjb3JkKGV4ZWMtPnZtKCksIEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUo
ZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1
Y3R1cmUoKSwgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBkZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNh
bFZhcmlhYmxlcykpCisgICAgLCBtX21vZHVsZVJlY29yZChleGVjLT52bSgpLCBKU01vZHVsZVJl
Y29yZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPnZtKCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+bW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVsZUtleSwgc291cmNlQ29kZSwgZGVjbGFy
ZWRWYXJpYWJsZXMsIGxleGljYWxWYXJpYWJsZXMpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcEltcGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgi
CisKKyNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJDb3B5VmlzaXRv
cklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3RlbXBsYXRlPD4KK2NvbnN0IEpTX0VY
UE9SVERBVEEgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Ojpz
X2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9E
X1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+KSB9OworCit0ZW1wbGF0
ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNoTWFwQnVja2V0PEhhc2hNYXBC
dWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBudWxs
cHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBEYXRhPgordm9pZCBIYXNoTWFw
QnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tldCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFw
QnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0
LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7
CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9uZXh0KTsKKyAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2KTsKKworICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9m
KERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgPT0gMCwgIldlIGFzc3VtZSB0
aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbWVtYmVycyBv
bmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJp
ZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRhKSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9m
KFdyaXRlQmFycmllcjxVbmtub3duPikpOworfQorCit0ZW1wbGF0ZTw+Citjb25zdCBKU19FWFBP
UlREQVRBIENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXRE
YXRhS2V5Pj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAwLCBDUkVB
VEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERh
dGFLZXk+PikgfTsKKwordGVtcGxhdGU8PgorY29uc3QgSlNfRVhQT1JUREFUQSBDbGFzc0luZm8g
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OnNf
aW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+
KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldD4KK3ZvaWQgSGFzaE1hcElt
cGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCogdGhpc09iamVjdCA9IGpzQ2FzdDxIYXNo
TWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVj
dCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3Ip
OworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faGVhZCk7CisgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisKKyAgICB2aXNpdG9yLmNvcHlMYXRlcih0
aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9rZW4sIHRoaXNPYmplY3QtPm1fYnVmZmVy
LmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5CeXRlcygpKTsKK30KKwordGVtcGxhdGUg
PHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+
Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENv
cHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0
b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hN
YXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tl
biAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgp
KSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSogb2xkQnVmZmVyID0gdGhpc09iamVjdC0+
bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBidWZmZXJTaXplSW5CeXRlcyA9IHRoaXNP
YmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAgICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBu
ZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVmZmVyVHlwZSo+KHZpc2l0b3IuYWxsb2Nh
dGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOworICAgICAgICBtZW1jcHkobmV3QnVmZmVy
LCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9i
dWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVyKTsKKyAgICAgICAgdmlzaXRvci5kaWRD
b3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMpOworICAgIH0KK30KKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1w
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJ
bXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNo
TWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTI0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitzdHJ1Y3QgSGFzaE1hcEJ1Y2tldERhdGFLZXkgeworICAgIFdyaXRlQmFycmllcjxVbmtu
b3duPiBrZXk7Cit9OworCitzdHJ1Y3QgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZSB7CisgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+IGtleTsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gdmFs
dWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0YT4KK2NsYXNzIEhhc2hNYXBCdWNrZXQg
OiBwdWJsaWMgSlNDZWxsIHsKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworCisgICAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXk+Ojp2YWx1ZSwgU3RydWN0dXJl
Kj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
bS5oYXNoTWFwQnVja2V0U2V0U3RydWN0dXJlLmdldCgpOworICAgIH0KKworICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8
c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZSwgU3RydWN0
dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLmdldCgpOworICAgIH0KKworcHVibGljOgor
ICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHBy
b3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyks
IGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEhhc2hNYXBCdWNrZXQqIGNyZWF0ZShWTSYg
dm0pCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0KiBidWNrZXQgPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxIYXNoTWFwQnVja2V0PERhdGE+Pih2bS5oZWFwKSkgSGFzaE1hcEJ1Y2tl
dCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGJ1Y2tldC0+ZmluaXNoQ3JlYXRp
b24odm0pOworICAgICAgICBBU1NFUlQoIWJ1Y2tldC0+bmV4dCgpKTsKKyAgICAgICAgQVNTRVJU
KCFidWNrZXQtPnByZXYoKSk7CisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQorCisgICAg
SGFzaE1hcEJ1Y2tldChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IEJh
c2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7IH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRO
ZXh0KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0KQorICAgIHsKKyAgICAgICAgbV9uZXh0
LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNl
dFByZXYoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNrZXQpCisgICAgeworICAgICAgICBtX3By
ZXYuc2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9p
ZCBzZXRLZXkoVk0mIHZtLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIG1fZGF0YS5rZXku
c2V0KHZtLCB0aGlzLCBrZXkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0g
RGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNf
c2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPjo6dmFsdWU+Ojp0eXBlIHNldFZhbHVl
KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fZGF0YS52YWx1ZS5zZXQo
dm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRh
PgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6dmFsdWU+Ojp0eXBlIHNldFZhbHVlKFZNJiwgSlNW
YWx1ZSkgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUga2V5KCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhLmtleS5nZXQoKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRh
PgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1l
PFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2YWx1ZSwgSlNWYWx1ZT46OnR5cGUgdmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YS52YWx1ZS5nZXQoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9y
Jik7CisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIG5leHQoKSBjb25zdCB7IHJl
dHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXQqIHBy
ZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7IH0KKworICAgIEFMV0FZU19JTkxJTkUg
Ym9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9kZWxldGVkOyB9CisgICAgQUxXQVlTX0lO
TElORSB2b2lkIHNldERlbGV0ZWQoYm9vbCBkZWxldGVkKSB7IG1fZGVsZXRlZCA9IGRlbGV0ZWQ7
IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZLZXkoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBtX2RhdGEpICsgT0JKRUNUX09G
RlNFVE9GKERhdGEsIGtleSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBE
YXRhPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwg
SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVlLCBwdHJkaWZmX3Q+Ojp0eXBlIG9mZnNl
dE9mVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFw
QnVja2V0LCBtX2RhdGEpICsgT0JKRUNUX09GRlNFVE9GKERhdGEsIHZhbHVlKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgRGF0YSBtX2RhdGE7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNr
ZXQ+IG1fbmV4dDsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldD4gbV9wcmV2OworICAg
IGJvb2wgbV9kZWxldGVkIHsgZmFsc2UgfTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCdWNr
ZXRUeXBlPgorY2xhc3MgSGFzaE1hcEJ1ZmZlciB7CitwdWJsaWM6CisgICAgSGFzaE1hcEJ1ZmZl
cigpID0gZGVsZXRlOworCisgICAgc3RhdGljIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSh1aW50MzJf
dCBjYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVybiBjYXBhY2l0eSAqIHNpemVvZihCdWNr
ZXRUeXBlKik7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBCdWNrZXRUeXBlKiogYnVmZmVy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QnVja2V0VHlwZSoq
Pih0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1ZmZlciogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1aW50MzJfdCBjYXBhY2l0eSkKKyAg
ICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAg
ICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1hcEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUo
Y2FwYWNpdHkpOworICAgICAgICB2b2lkKiBkYXRhID0gbnVsbHB0cjsKKyAgICAgICAgRGVmZXJH
Q0ZvckFXaGlsZSBkZWZlcih2bS5oZWFwKTsKKyAgICAgICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9j
YXRlU3RvcmFnZShvd25lciwgYWxsb2NhdGlvblNpemUsICZkYXRhKSkgeworICAgICAgICAgICAg
dGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3BlKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1ZmZlciogYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlcio+KGRhdGEpOworICAgICAgICBtZW1zZXQoYnVmZmVyLCAt
MSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KK307CisK
K0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgYXJlS2V5c0VxdWFsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgLy8gV2Ugd2FudCArMCBhbmQgLTAgdG8gYmUg
Y29tcGFyZWQgdG8gdHJ1ZSBoZXJlLiBzYW1lVmFsdWUoKSBpdHNlbGYgZG9lc24ndAorICAgIC8v
IGd1YXJhbnRlZSB0aGF0LCBob3dldmVyLCB3ZSBub3JtYWxpemUgYWxsIGtleXMgYmVmb3JlIGNv
bXBhcmluZyBhbmQgc3RvcmluZworICAgIC8vIHRoZW0gaW4gdGhlIG1hcC4gVGhlIG5vcm1hbGl6
YXRpb24gd2lsbCBjb252ZXJ0IC0wLjAgYW5kIDAuMCB0byB0aGUgaW50ZWdlcgorICAgIC8vIHJl
cHJlc2VudGF0aW9uIGZvciAwLgorICAgIHJldHVybiBzYW1lVmFsdWUoZXhlYywgYSwgYik7Cit9
CisKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBub3JtYWxpemVNYXBLZXkoSlNWYWx1ZSBrZXkpCit7
CisgICAgaWYgKCFrZXkuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIGtleTsKKworICAgIGlm
IChrZXkuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4ga2V5OworCisgICAgZG91YmxlIGQgPSBr
ZXkuYXNEb3VibGUoKTsKKyAgICBpZiAoc3RkOjppc25hbihkKSkKKyAgICAgICAgcmV0dXJuIGtl
eTsKKworICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50PihkKTsKKyAgICBpZiAoaSA9PSBkKSB7
CisgICAgICAgIC8vIFdoZW4gYSBrZXkgaXMgLTAsIHdlIGNvbnZlcnQgaXQgdG8gcG9zaXRpdmUg
emVyby4KKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyB0aGUgZG91YmxlIHJlcHJlc2VudGF0aW9u
IGZvciBhbiBpbnRlZ2VyLCB3ZSBjb252ZXJ0IGl0IHRvIGFuIGludGVnZXIuCisgICAgICAgIHJl
dHVybiBqc051bWJlcihpKTsKKyAgICB9CisgICAgLy8gVGhpcyBtZWFucyBrZXkgaXMgZGVmaW5p
dGVseSBub3QgbmVnYXRpdmUgemVybywgYW5kIGl0J3MgZGVmaW5pdGVseSBub3QgYSBkb3VibGUg
cmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4gCisgICAgcmV0dXJuIGtleTsKK30KKworQUxX
QVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVNYXBLZXko
dmFsdWUpID09IHZhbHVlLCAiV2UgZXhwZWN0IG5vcm1hbGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50
byB0aGlzIGZ1bmN0aW9uLiIpOworCisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgSlNTdHJpbmcq
IHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKKyAgICAgICAgY29uc3QgU3RyaW5nJiB3dGZTdHJp
bmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhj
ZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOworICAgICAgICByZXR1cm4g
d3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0KKworICAgIGF1dG8gd2FuZ3NJbnQ2NEhh
c2ggPSBbXSAodWludDY0X3Qga2V5KSAtPiB1aW50MzJfdCB7CisgICAgICAgIGtleSArPSB+KGtl
eSA8PCAzMik7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICAgICAga2V5ICs9IH4o
a2V5IDw8IDEzKTsKKyAgICAgICAga2V5IF49IChrZXkgPj4gOCk7CisgICAgICAgIGtleSArPSAo
a2V5IDw8IDMpOworICAgICAgICBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAgICAgIGtleSArPSB+
KGtleSA8PCAyNyk7CisgICAgICAgIGtleSBePSAoa2V5ID4+IDMxKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpOworICAgIH07CisgICAgdWludDY0X3QgcmF3VmFs
dWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgIHJldHVybiB3YW5nc0ludDY0SGFzaChy
YXdWYWx1ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBIYXNoTWFwQnVja2V0VHlwZT4KK2Ns
YXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTQ2VsbCB7CisgICAgdHlwZWRlZiBKU0NlbGwgQmFz
ZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWZmZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBC
dWZmZXJUeXBlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlw
ZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0
eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAgeworICAgICAgICByZXR1cm4gdm0uaGFz
aE1hcEltcGxTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlW
YWx1ZT4+Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwSW1wbE1hcFN0cnVjdHVyZS5nZXQoKTsK
KyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VYUE9SVF9JTkZPOworCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFw
SW1wbCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtKQorICAgIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6b2Zm
c2V0T2ZLZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojpv
ZmZzZXRPZktleSgpLCAiV2UgYXNzdW1lIHRoaXMgdG8gYmUgdHJ1ZSBpbiB0aGUgREZHIGFuZCBG
VEwgSklULiIpOworCisgICAgICAgIEhhc2hNYXBJbXBsKiBpbXBsID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXApKSBIYXNoTWFwSW1wbCh2bSwgc2VsZWN0
U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGltcGwtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsK
KyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5n
U3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOworCisgICAgSGFzaE1hcElt
cGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1
Y3R1cmUpCisgICAgICAgICwgbV9zaXplKDApCisgICAgICAgICwgbV9kZWxldGVDb3VudCgwKQor
ICAgICAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICB7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElO
RSBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZlcigpOworICAgIH0KKworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgeworICAgICAgICBhdXRvIHNjb3Bl
ID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKworICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICAgICAg
aWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBtX2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNoTWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZt
KSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVh
dGUodm0pKTsKKworICAgICAgICBtX2hlYWQtPnNldE5leHQodm0sIG1fdGFpbC5nZXQoKSk7Cisg
ICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAgbV9oZWFk
LT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBtX3RhaWwtPnNldERlbGV0ZWQodHJ1ZSk7CisK
KyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tldFR5cGUqIGVtcHR5VmFsdWUoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIYXNoTWFwQnVja2V0VHlwZSo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oLTEpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzRW1wdHkoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAgICAg
IHJldHVybiBidWNrZXQgPT0gZW1wdHlWYWx1ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBIYXNo
TWFwQnVja2V0VHlwZSogZGVsZXRlZFZhbHVlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldFR5cGUqPihzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KC0zKSk7
CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0RlbGV0ZWQoSGFzaE1h
cEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNrZXQgPT0gZGVs
ZXRlZFZhbHVlKCk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlw
ZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAg
ICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RI
Uk9XX1NDT1BFKHZtKTsKKyAgICAgICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CisgICAg
ICAgIHVpbnQzMl90IGhhc2ggPSBqc01hcEhhc2goZXhlYywgdm0sIGtleSk7CisgICAgICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIGZpbmRCdWNrZXQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBoYXNoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVNYXBLZXkoa2V5KSA9PSBrZXksICJXZSBleHBlY3Qg
bm9ybWFsaXplZCB2YWx1ZXMgZmxvd2luZyBpbnRvIHRoaXMgZnVuY3Rpb24uIik7CisgICAgICAg
IHJldHVybiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFuZE5vcm1hbGl6ZWQoZXhlYywga2V5LCBo
YXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBpZiAoSGFzaE1hcEJ1Y2tldFR5cGUq
KiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSkpCisgICAgICAgICAgICByZXR1cm4gKCpi
dWNrZXQpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisK
KyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkp
CisgICAgeworICAgICAgICByZXR1cm4gISFmaW5kQnVja2V0KGV4ZWMsIGtleSk7CisgICAgfQor
CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5
LCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgIHsKKyAgICAgICAga2V5ID0gbm9ybWFs
aXplTWFwS2V5KGtleSk7CisKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAg
YXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgICAgIGNvbnN0IHVp
bnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAgICAgICAgdWludDMyX3QgaW5kZXggPSBq
c01hcEhhc2goZXhlYywgdm0sIGtleSkgJiBtYXNrOworICAgICAgICBpZiAoVU5MSUtFTFkoc2Nv
cGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBIYXNoTWFwQnVj
a2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigpOworICAgICAgICBIYXNoTWFwQnVja2V0
VHlwZSogYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1
Y2tldCkpIHsKKyAgICAgICAgICAgIGlmICghaXNEZWxldGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0Vx
dWFsKGV4ZWMsIGtleSwgYnVja2V0LT5rZXkoKSkpIHsKKyAgICAgICAgICAgICAgICBidWNrZXQt
PnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaW5kZXggPSAoaW5kZXggKyAxKSAmIG1hc2s7CisgICAgICAgICAg
ICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAgSGFzaE1hcEJ1
Y2tldFR5cGUqIG5ld0VudHJ5ID0gbV90YWlsLmdldCgpOworICAgICAgICBidWZmZXJbaW5kZXhd
ID0gbmV3RW50cnk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRLZXkodm0sIGtleSk7CisgICAgICAg
IG5ld0VudHJ5LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOworICAgICAgICBuZXdFbnRyeS0+c2V0RGVs
ZXRlZChmYWxzZSk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBuZXdUYWlsID0gSGFzaE1h
cEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMsIG5l
d1RhaWwpOworICAgICAgICBuZXdUYWlsLT5zZXRQcmV2KHZtLCBuZXdFbnRyeSk7CisgICAgICAg
IG5ld1RhaWwtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXROZXh0KHZt
LCBuZXdUYWlsKTsKKyAgICAgICAgdWludDMyX3QgbmV3U2l6ZSA9ICsrbV9zaXplOworICAgICAg
ICBpZiAoMipuZXdTaXplID4gbV9jYXBhY2l0eSkKKyAgICAgICAgICAgIHJlaGFzaChleGVjKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1Y2tldCA9
IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAgICAgaWYgKCFidWNrZXQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICAgICAg
SGFzaE1hcEJ1Y2tldFR5cGUqIGltcGwgPSAqYnVja2V0OworICAgICAgICBpbXBsLT5uZXh0KCkt
PnNldFByZXYodm0sIGltcGwtPnByZXYoKSk7CisgICAgICAgIGltcGwtPnByZXYoKS0+c2V0TmV4
dCh2bSwgaW1wbC0+bmV4dCgpKTsKKyAgICAgICAgaW1wbC0+c2V0RGVsZXRlZCh0cnVlKTsKKwor
ICAgICAgICAqYnVja2V0ID0gZGVsZXRlZFZhbHVlKCk7CisKKyAgICAgICAgbV9kZWxldGVDb3Vu
dCsrOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dWludDMyX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3Np
emUgPj0gbV9kZWxldGVDb3VudCk7CisgICAgICAgIHJldHVybiBtX3NpemUgLSBtX2RlbGV0ZUNv
dW50OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4
ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBtX3NpemUg
PSAwOworICAgICAgICBtX2RlbGV0ZUNvdW50ID0gMDsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5
cGUqIGhlYWQgPSBtX2hlYWQuZ2V0KCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNr
ZXQgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIHRhaWwgPSBt
X3RhaWwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChidWNrZXQgIT0gdGFpbCkgeworICAgICAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5leHQgPSBidWNrZXQtPm5leHQoKTsKKyAgICAgICAgICAg
IC8vIFdlIHJlc3RhcnQgZWFjaCBpdGVyYXRvciBieSBwb2ludGluZyBpdCB0byB0aGUgaGVhZCBv
ZiB0aGUgbGlzdC4KKyAgICAgICAgICAgIGJ1Y2tldC0+c2V0TmV4dCh2bSwgaGVhZCk7CisgICAg
ICAgICAgICBidWNrZXQgPSBuZXh0OworICAgICAgICB9CisgICAgICAgIG1faGVhZC0+c2V0TmV4
dCh2bSwgbV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQu
Z2V0KCkpOworICAgICAgICBtX2NhcGFjaXR5ID0gNDsKKyAgICAgICAgbWFrZUFuZFNldE5ld0J1
ZmZlcihleGVjLCB2bSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSBzaXplX3QgYnVmZmVy
U2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY2FwYWNpdHkgKiBz
aXplb2YoSGFzaE1hcEJ1Y2tldFR5cGUqKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mQnVmZmVyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+LCBtX2J1ZmZlcik7CisgICAgfQorCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhcGFjaXR5KCkKKyAgICB7CisgICAgICAgIHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+LCBtX2NhcGFj
aXR5KTsKKyAgICB9CisKKyAgICBIYXNoTWFwQnVja2V0VHlwZSogaGVhZCgpIHsgcmV0dXJuIG1f
aGVhZC5nZXQoKTsgfQorICAgIEhhc2hNYXBCdWNrZXRUeXBlKiB0YWlsKCkgeyByZXR1cm4gbV90
YWlsLmdldCgpOyB9CisKKyAgICBzaXplX3QgYXBwcm94aW1hdGVTaXplKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKEhhc2hNYXBJbXBsKTsKKyAgICAgICAgc2l6
ZSArPSBidWZmZXJTaXplSW5CeXRlcygpOworICAgICAgICBzaXplICs9IDIgKiBzaXplb2YoSGFz
aE1hcEJ1Y2tldFR5cGUpOyAvLyBIZWFkIGFuZCB0YWlsIG1lbWJlcnMuCisgICAgICAgIHNpemUg
Kz0gKG1fZGVsZXRlQ291bnQgKyBtX3NpemUpICogc2l6ZW9mKEhhc2hNYXBCdWNrZXRUeXBlKTsg
Ly8gTnVtYmVyIG9mIG1lbWJlcnMgb24gdGhlIGxpc3QuCisgICAgICAgIHJldHVybiBzaXplOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRUeXBlKiog
ZmluZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3JtYWxpemVkKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBrZXksIHVpbnQzMl90IGhhc2gpCisgICAgeworICAgICAgICBjb25zdCB1aW50MzJfdCBt
YXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIHVpbnQzMl90IGluZGV4ID0gaGFzaCAmIG1h
c2s7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiogYnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7
CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworCisg
ICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7CisgICAgICAgICAgICBpZiAoIWlzRGVs
ZXRlZChidWNrZXQpICYmIGFyZUtleXNFcXVhbChleGVjLCBrZXksIGJ1Y2tldC0+a2V5KCkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXIgKyBpbmRleDsKKyAgICAgICAgICAgIGluZGV4
ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4
XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lk
IHJlaGFzaChFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAg
ICAgICAgbV9jYXBhY2l0eSA9IG1fY2FwYWNpdHkgKiAyOworICAgICAgICBtYWtlQW5kU2V0TmV3
QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogaXRl
ciA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogZW5kID0gbV90
YWlsLmdldCgpOworICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9jYXBhY2l0eSAmIChtX2NhcGFjaXR5IC0gMSkp
KTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWZmZXIgPSB0aGlzLT5idWZmZXIoKTsK
KyAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7CisgICAgICAgICAgICB1aW50MzJfdCBpbmRl
eCA9IGpzTWFwSGFzaChleGVjLCB2bSwgaXRlci0+a2V5KCkpICYgbWFzazsKKyAgICAgICAgICAg
IEFTU0VSVF9XSVRIX01FU1NBR0UoIXNjb3BlLmV4Y2VwdGlvbigpLCAiQWxsIGtleXMgc2hvdWxk
IGFscmVhZHkgYmUgaGFzaGVkIGJlZm9yZSwgc28gdGhpcyBzaG91bGQgbm90IHRocm93IGJlY2F1
c2UgaXQgd29uJ3QgcmVzb2x2ZSByb3Blcy4iKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkgeworICAgICAgICAgICAgICAgICAgICBp
bmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAgICAgICAgICAgICAgICAgYnVja2V0ID0g
YnVmZmVyW2luZGV4XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBidWZmZXJbaW5kZXhdID0gaXRlcjsKKyAgICAgICAgICAgIGl0ZXIgPSBpdGVyLT5uZXh0
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIG1ha2VBbmRTZXROZXdCdWZmZXIoRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgeworICAgICAgICBBU1NFUlQoIShtX2NhcGFjaXR5
ICYgKG1fY2FwYWNpdHkgLSAxKSkpOworCisgICAgICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBidWZm
ZXIgPSBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRlKGV4ZWMsIHZtLCB0aGlzLCBtX2NhcGFjaXR5
KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFidWZmZXIpKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhpcywgYnVmZmVyKTsKKyAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2NhcGFjaXR5OyBpKyspCisgICAgICAgICAgICAgICAgQVNTRVJUKGlzRW1wdHkodGhpcy0+YnVm
ZmVyKClbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFdyaXRlQmFycmllcjxIYXNoTWFw
QnVja2V0VHlwZT4gbV9oZWFkOworICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4g
bV90YWlsOworICAgIENvcHlCYXJyaWVyPEhhc2hNYXBCdWZmZXJUeXBlPiBtX2J1ZmZlcjsKKyAg
ICB1aW50MzJfdCBtX3NpemU7CisgICAgdWludDMyX3QgbV9kZWxldGVDb3VudDsKKyAgICB1aW50
MzJfdCBtX2NhcGFjaXR5OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAkocmV2aXNpb24gMjA1NDkyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDYgKzYyLDkgQEAgZW51bSBKU19FWFBPUlRfUFJJVkFURSBJbnRyaW5zaWMgewogICAg
IElzUmVnRXhwT2JqZWN0SW50cmluc2ljLAogICAgIElzVHlwZWRBcnJheVZpZXdJbnRyaW5zaWMs
CiAgICAgQm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxsSW50cmluc2ljLAorICAgIEpTTWFwR2V0
SW50cmluc2ljLAorICAgIEpTTWFwSGFzSW50cmluc2ljLAorICAgIEpTU2V0SGFzSW50cmluc2lj
LAogCiAgICAgLy8gR2V0dGVyIGludHJpbnNpY3MuCiAgICAgVHlwZWRBcnJheUxlbmd0aEludHJp
bnNpYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJ
KHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYgKzYwNiw5IEBAIGlubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgSlNDZWxsKiBhLCAKIAogYm9vbCBpc1RoaXNWYWx1ZUFsdGVyZWQoY29u
c3QgUHV0UHJvcGVydHlTbG90JiwgSlNPYmplY3QqIGJhc2VPYmplY3QpOwogCisvLyBTZWUgc2Vj
dGlvbiA3LjIuOTogaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc2FtZXZhbHVl
Citib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYik7CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlNDSlNWYWx1ZV9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHJldmlz
aW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTgsNiArMTA1OCwyMiBAQCBBTFdBWVNfSU5M
SU5FIGJvb2wgaXNUaGlzVmFsdWVBbHRlcmVkKGNvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8v
IFNlZSBzZWN0aW9uIDcuMi45OiBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1z
YW1ldmFsdWUKK0FMV0FZU19JTkxJTkUgYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICBpZiAoIWEuaXNOdW1iZXIoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGEsIGIpOworICAgIGlmICghYi5pc051
bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZG91YmxlIHggPSBhLmFzTnVtYmVy
KCk7CisgICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7CisgICAgYm9vbCB4SXNOYU4gPSBzdGQ6
OmlzbmFuKHgpOworICAgIGJvb2wgeUlzTmFOID0gc3RkOjppc25hbih5KTsKKyAgICBpZiAoeElz
TmFOIHx8IHlJc05hTikKKyAgICAgICAgcmV0dXJuIHhJc05hTiAmJiB5SXNOYU47CisgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgPT0gYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih5
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBKU1ZhbHVlSW5saW5lc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0MSw3ICs2NDEsNyBAQCBw
dXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0ucHJvcGVyCiAgICAgcHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFtZXMtPlJlZmxlY3QsIHJlZmxlY3RPYmpl
Y3QsIERvbnRFbnVtKTsKIAogICAgIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLnNldCh2bSwgdGhp
cywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9tb2R1bGVMb2Fk
ZXJQcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBtX21vZHVsZUxvYWRlci5zZXQodm0sIHRoaXMsIEpT
TW9kdWxlTG9hZGVyOjpjcmVhdGUodm0sIHRoaXMsIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdl
dCgpKSk7CisgICAgbV9tb2R1bGVMb2FkZXIuc2V0KHZtLCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6
Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdm0sIHRoaXMsIG1fbW9kdWxlTG9hZGVyU3RydWN0dXJlLmdl
dCgpKSk7CiAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUludGVybmFsTW9kdWxlTG9hZGVyKCkpCiAg
ICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5M
b2FkZXIsIG1fbW9kdWxlTG9hZGVyLmdldCgpLCBEb250RW51bSk7CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNzgg
KzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNNYXAuaCIKIAotI2lu
Y2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgotI2luY2x1ZGUgIk1hcERhdGFJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU3RydWN0dXJl
SW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNvbnN0IENsYXNzSW5mbyBKU01hcDo6c19pbmZvID0geyAiTWFwIiwgJkJhc2U6OnNfaW5mbywg
MCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU01hcCkgfTsKIAotdm9pZCBKU01hcDo6ZGVzdHJveShK
U0NlbGwqIGNlbGwpCi17Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihj
ZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU01hcDo6fkpTTWFwKCk7Ci19Ci0KLXNpemVfdCBKU01h
cDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNNYXAqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAgICBzaXplX3QgbWFwRGF0YVNpemUgPSB0aGlzT2Jq
ZWN0LT5tX21hcERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGlt
YXRlZFNpemUoY2VsbCkgKyBtYXBEYXRhU2l6ZTsKLX0KLQogU3RyaW5nIEpTTWFwOjp0b1N0cmlu
Z05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKQogewogICAgIHJldHVybiBBU0NJSUxp
dGVyYWwoIk9iamVjdCIpOwogfQogCi12b2lkIEpTTWFwOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCog
Y2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbihj
ZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNNYXAqPihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0
Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0KLXZvaWQgSlNNYXA6OmNvcHlCYWNraW5nU3Rv
cmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlzaXRvciwgQ29weVRva2VuIHRva2VuKQot
ewotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2VsbCwgdmlzaXRvciwgdG9rZW4pOwotICAg
IGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEuY29weUJhY2tpbmdTdG9yZSh2aXNpdG9y
LCB0b2tlbik7Ci19Ci0KLWJvb2wgSlNNYXA6OmhhcyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
a2V5KQotewotICAgIHJldHVybiBtX21hcERhdGEuY29udGFpbnMoZXhlYywga2V5KTsKLX0KLQot
c2l6ZV90IEpTTWFwOjpzaXplKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gbV9tYXBE
YXRhLnNpemUoZXhlYyk7Ci19Ci0KLUpTVmFsdWUgSlNNYXA6OmdldChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQotewotICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9tYXBEYXRhLmdldChleGVj
LCBrZXkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEpTTWFwOjpzZXQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBtX21hcERhdGEuc2V0KGV4ZWMs
IHRoaXMsIGtleSwgdmFsdWUpOwotfQotCi12b2lkIEpTTWFwOjpjbGVhcihFeGVjU3RhdGUqKQot
ewotICAgIG1fbWFwRGF0YS5jbGVhcigpOwotfQotCi1ib29sIEpTTWFwOjpyZW1vdmUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLnJlbW92ZShl
eGVjLCBrZXkpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFw
LmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEwOCArMjYsNDkgQEAKICNpZm5kZWYgSlNNYXBfaAog
I2RlZmluZSBKU01hcF9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcEJh
c2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTTWFwSXRlcmF0b3I7CiAKLWNsYXNz
IEpTTWFwIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTTWFwIDogcHVi
bGljIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj4gewor
ICAgIHR5cGVkZWYgTWFwQmFzZTxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFs
dWU+PiBCYXNlOwogcHVibGljOgotICAgIHR5cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFz
ZTsKLQogICAgIGZyaWVuZCBjbGFzcyBKU01hcEl0ZXJhdG9yOwogCi0gICAgLy8gT3VyIG1hcmtp
bmcgZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0byBtYWludGFpbiB0aGlzIGxheW91dCwgYW5kIGhh
dmUgYWxsCi0gICAgLy8gZmllbGRzIGJlIFdyaXRlQmFycmllcjxVbmtub3duPgotICAgIGNsYXNz
IEVudHJ5IHsKLSAgICBwcml2YXRlOgotICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9r
ZXk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOwotCi0gICAgcHVibGlj
OgotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIGtleSgpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tleTsKLSAgICAgICAgfQotCi0gICAgICAgIGNv
bnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICAgICAgewotICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmQoJm1fa2V5KTsKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVl
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxs
KiBvd25lciwgSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNldCh2
bSwgb3duZXIsIGtleSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHNldEtleVdpdGhvdXRX
cml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fa2V5LnNl
dFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0
VmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIHZhbHVlKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX3ZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5j
bGVhcigpOwotICAgICAgICAgICAgbV92YWx1ZS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfTsK
LQotICAgIHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnksIEpTTWFwSXRlcmF0b3I+IE1hcERhdGE7
Ci0KICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0s
IGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVG
bGFncyksIGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xv
YmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTTWFwVHlwZSwgU3RydWN0dXJlRmxhZ3Mp
LCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTTWFwKiBjcmVhdGUoRXhlY1N0YXRlKiBl
eGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSlNNYXAq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNYXA+KHZtLmhlYXApKSBK
U01hcCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNT
dGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgQUxXQVlTX0lOTElORSBKU1Zh
bHVlIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gbV9tYXAt
PmdldChleGVjLCBrZXkpOwogICAgIH0KIAotICAgIGJvb2wgaGFzKEV4ZWNTdGF0ZSosIEpTVmFs
dWUpOwotICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSopOwotICAgIEpTVmFsdWUgZ2V0KEV4ZWNT
dGF0ZSosIEpTVmFsdWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0KEV4ZWNTdGF0
ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKTsKLSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0
ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOworICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIG1fbWFwLT5hZGQoZXhlYywga2V5LCB2YWx1ZSk7CisgICAgfQog
CiBwcml2YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fbWFwRGF0YSh2bSwgdGhpcykK
ICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKLSAgICBz
dGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxsKik7Ci0gICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIHN0YXRpYyB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogICAgIHN0YXRp
YyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2JqZWN0KiwgRXhlY1N0YXRlKik7Ci0KLSAg
ICBNYXBEYXRhIG1fbWFwRGF0YTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQCB2b2lkIEpTTWFwSXRlcmF0b3I6OmZpbmlzaENyZWF0aW9u
KFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIG1fbWFwLnNldCh2
bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNldEl0ZXJhdG9yKHZtLCBtX21hcC0+aW1w
bCgpLT5oZWFkKCkpOwogfQogCiB2b2lkIEpTTWFwSXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKQEAgLTQ2LDYgKzQ3LDcgQEAgdm9pZCBK
U01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbAogICAgIEFTU0VSVF9HQ19PQkpFQ1Rf
SU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRo
aXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21h
cCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcik7CiB9CiAKIEpTVmFs
dWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1
ZSBrZXksIEpTVmFsdWUgdmFsdWUpCkBAIC01OSw4ICs2MSw5IEBAIEpTVmFsdWUgSlNNYXBJdGVy
YXRvcjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNNYXBJdGVyYXRvciogSlNNYXBJdGVyYXRvcjo6
Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1dG8gY2xvbmUgPSBKU01hcEl0ZXJhdG9y
OjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5tYXBJ
dGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwgbV9raW5kKTsKLSAgICBjbG9uZS0+bV9p
dGVyYXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBhdXRv
IGNsb25lID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZtLCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFs
T2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIG1fbWFwLmdldCgpLCBtX2tpbmQpOwor
ICAgIGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVyLmdldCgpKTsKICAgICByZXR1cm4gY2xv
bmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcEl0
ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgSlNNYXBJdGVyYXRvciA6IHB1YmxpYyBKU05vbkZpbmFsT2Jq
ZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1
ZT4gSGFzaE1hcEJ1Y2tldFR5cGU7CiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2Jq
ZWN0IEJhc2U7CiAKQEAgLTUxLDUyICs1Miw2MiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpT
VmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFu
Y2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0gICAgICAgIFdURjo6S2V5VmFsdWVQYWly
PEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAgIGlmICghbV9pdGVyYXRvci5uZXh0KHBh
aXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogcHJldiA9IG1faXRlci5nZXQoKTsKKyAg
ICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2l0ZXItPm5leHQoKTsKKyAgICAgICAgd2hpbGUg
KGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkgeworICAgICAgICAgICAgcHJldiA9IGJ1Y2tl
dDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCgpOworICAgICAgICB9CisgICAg
ICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBzZXRJdGVyYXRvcihleGVjLT52bSgpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgICAg
IHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRo
ZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGluZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9u
IGlzIGNhbGwgbmV4dCgpLgorICAgICAgICByZXR1cm4gYnVja2V0OworICAgIH0KKyAgICBib29s
IG5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBhZHZhbmNlSXRlcihleGVjKTsKKyAgICAgICAgaWYg
KCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgaWYgKG1fa2lu
ZCA9PSBJdGVyYXRlVmFsdWUpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIudmFsdWU7CisgICAg
ICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAobV9raW5k
ID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2YWx1ZSA9IHBhaXIua2V5OworICAgICAgICAg
ICAgdmFsdWUgPSBidWNrZXQtPmtleSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1
ZSA9IGNyZWF0ZVBhaXIoY2FsbEZyYW1lLCBwYWlyLmtleSwgcGFpci52YWx1ZSk7CisgICAgICAg
ICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVja2V0LT5rZXkoKSwgYnVja2V0LT52YWx1
ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgYm9vbCBuZXh0S2V5VmFs
dWUoSlNWYWx1ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkKKyAgICBib29sIG5leHRLZXlWYWx1ZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIGtleSwgSlNWYWx1ZSYgdmFsdWUpCiAgICAgewotICAg
ICAgICBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBKU1ZhbHVlPiBwYWlyOwotICAgICAgICBp
ZiAoIW1faXRlcmF0b3IubmV4dChwYWlyKSkKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1
Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAgICBpZiAoIWJ1Y2tldCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBrZXkgPSBwYWlyLmtleTsKLSAgICAgICAgdmFs
dWUgPSBwYWlyLnZhbHVlOworICAgICAgICBrZXkgPSBidWNrZXQtPmtleSgpOworICAgICAgICB2
YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0g
ICAgdm9pZCBmaW5pc2goKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsKLSAg
ICB9Ci0KICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0K
ICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX21hcC5nZXQoKTsg
fQogICAgIEpTTWFwSXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNNYXA6Ok1h
cERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNNYXBJdGVyYXRvcihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCogaXRlcmF0ZWRPYmplY3QsIEl0ZXJhdGlv
bktpbmQga2luZCkKKyAgICBKU01hcEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX21hcERhdGEuY3Jl
YXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQorICAgIHsgfQor
CisgICAgdm9pZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQp
CiAgICAgeworICAgICAgICBtX2l0ZXIuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBidWNrZXQpOwog
ICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBK
U01hcCopOwpAQCAtMTA0LDcgKzExNSw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgV3JpdGVCYXJyaWVyPEpT
TWFwPiBtX21hcDsKLSAgICBKU01hcDo6TWFwRGF0YTo6SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7
CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRUeXBlPiBtX2l0ZXI7CiAgICAgSXRlcmF0
aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJ
QkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxMSArNTUsMTQgQEAgSlNNb2R1bGVMb2FkZXI6OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwg
UwogewogfQogCi12b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit2b2lkIEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hD
cmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVy
aXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygm
dm0sICJyZWdpc3RyeSIpLCBKU01hcDo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVj
dHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAg
IEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0
cnVjdHVyZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCghc2NvcGUuZXhjZXB0aW9uKCkpOworICAg
IHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBt
YXApOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDEwICs0NywxMCBAQCBwdWJsaWM6CiAgICAgICAgIFJlYWR5ID0gNiwKICAgICB9
OwogCi0gICAgc3RhdGljIEpTTW9kdWxlTG9hZGVyKiBjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNN
b2R1bGVMb2FkZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBK
U01vZHVsZUxvYWRlciogb2JqZWN0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1
bGVMb2FkZXI+KHZtLmhlYXApKSBKU01vZHVsZUxvYWRlcih2bSwgc3RydWN0dXJlKTsKLSAgICAg
ICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xvYmFsT2JqZWN0KTsKKyAgICAgICAgb2Jq
ZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSwgZ2xvYmFsT2JqZWN0KTsKICAgICAgICAgcmV0
dXJuIG9iamVjdDsKICAgICB9CiAKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgIEpTVmFs
dWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgbW9kdWxlUmVjb3Jk
LCBKU1ZhbHVlIGluaXRpYXRvcik7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNT
dGF0ZSosIFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNCArNDQsMTcgQEAgdm9p
ZCBKU01vZHVsZVJlY29yZDo6ZGVzdHJveShKU0NlbGwqIGNlbAogICAgIHRoaXNPYmplY3QtPkpT
TW9kdWxlUmVjb3JkOjp+SlNNb2R1bGVSZWNvcmQoKTsKIH0KIAotdm9pZCBKU01vZHVsZVJlY29y
ZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3Jl
YXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBwdXREaXJlY3Qodm0s
IElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInJlZ2lzdHJ5RW50cnki
KSksIGpzVW5kZWZpbmVkKCkpOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVkIikpLCBqc0Jvb2xlYW4oZmFsc2UpKTsK
IAotICAgIG1fZGVwZW5kZW5jaWVzTWFwLnNldCh2bSwgdGhpcywgSlNNYXA6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0KCktPm1hcFN0cnVjdHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMs
IHZtLCBnbG9iYWxPYmplY3QoKS0+bWFwU3RydWN0dXJlKCkpOworICAgIFJFTEVBU0VfQVNTRVJU
KCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgbV9kZXBlbmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlz
LCBtYXApOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFT
Q0lJTGl0ZXJhbCgiZGVwZW5kZW5jaWVzTWFwIikpLCBtX2RlcGVuZGVuY2llc01hcC5nZXQoKSk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlUmVjb3Jk
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVS
ZWNvcmQuaAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtODcsMTAgKzg3LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3Qs
IHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkp
OwogICAgIH0KIAotICAgIHN0YXRpYyBKU01vZHVsZVJlY29yZCogY3JlYXRlKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIG1vZHVsZUtleSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCYgZGVjbGFyZWRW
YXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGxleGljYWxWYXJpYWJsZXMpCisg
ICAgc3RhdGljIEpTTW9kdWxlUmVjb3JkKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xh
cmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVz
KQogICAgIHsKICAgICAgICAgSlNNb2R1bGVSZWNvcmQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVSZWNvcmQ+KHZtLmhlYXApKSBKU01vZHVsZVJlY29yZCh2
bSwgc3RydWN0dXJlLCBtb2R1bGVLZXksIHNvdXJjZUNvZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBs
ZXhpY2FsVmFyaWFibGVzKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0
dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAtMTUyLDcgKzE1Miw3IEBAIHByaXZhdGU6CiAgICAg
ewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAgICB2b2lkIGZpbmlz
aENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJik7CiAKICAgICBKU01vZHVsZU5hbWVzcGFjZU9iamVj
dCogZ2V0TW9kdWxlTmFtZXNwYWNlKEV4ZWNTdGF0ZSopOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcwICsyNiwx
NSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkpTU2V0LmgiCiAKLSNpbmNsdWRl
ICJDb3BpZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgot
I2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJNYXBEYXRhSW5saW5lcy5oIgot
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgotI2luY2x1ZGUgIlN0cnVjdHVyZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCiBjb25z
dCBDbGFzc0luZm8gSlNTZXQ6OnNfaW5mbyA9IHsgIlNldCIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoSlNTZXQpIH07CiAKLXZvaWQgSlNTZXQ6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQotewotICAgIEpTU2V0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7
Ci0gICAgdGhpc09iamVjdC0+SlNTZXQ6On5KU1NldCgpOwotfQotCiBTdHJpbmcgSlNTZXQ6OnRv
U3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopCiB7CiAgICAgcmV0dXJuIEFT
Q0lJTGl0ZXJhbCgiT2JqZWN0Iik7CiB9CiAKLXNpemVfdCBKU1NldDo6ZXN0aW1hdGVkU2l6ZShK
U0NlbGwqIGNlbGwpCi17Ci0gICAgSlNTZXQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihj
ZWxsKTsKLSAgICBzaXplX3Qgc2V0RGF0YVNpemUgPSB0aGlzT2JqZWN0LT5tX3NldERhdGEuY2Fw
YWNpdHlJbkJ5dGVzKCk7Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBz
ZXREYXRhU2l6ZTsKLX0KLQotdm9pZCBKU1NldDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwg
dmlzaXRvcik7Ci0gICAganNDYXN0PEpTU2V0Kj4oY2VsbCktPm1fc2V0RGF0YS52aXNpdENoaWxk
cmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpTU2V0Ojpjb3B5QmFja2luZ1N0b3JlKEpT
Q2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKLXsKLSAg
ICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKLSAgICBqc0Nh
c3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLmNvcHlCYWNraW5nU3RvcmUodmlzaXRvciwgdG9r
ZW4pOwotfQotCi1ib29sIEpTU2V0OjpoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
KQotewotICAgIHJldHVybiBtX3NldERhdGEuY29udGFpbnMoZXhlYywgdmFsdWUpOwotfQotCi1z
aXplX3QgSlNTZXQ6OnNpemUoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBtX3NldERh
dGEuc2l6ZShleGVjKTsKLX0KLQotdm9pZCBKU1NldDo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBtX3NldERhdGEuc2V0KGV4ZWMsIHRoaXMsIHZhbHVlLCB2YWx1
ZSk7Ci19Ci0KLXZvaWQgSlNTZXQ6OmNsZWFyKEV4ZWNTdGF0ZSopCi17Ci0gICAgbV9zZXREYXRh
LmNsZWFyKCk7Ci19Ci0KLWJvb2wgSlNTZXQ6OnJlbW92ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFs
dWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0YS5yZW1vdmUoZXhlYywgdmFsdWUpOwot
fQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHJldmlzaW9u
IDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDEwMyArMjYsNDUgQEAKICNpZm5kZWYgSlNTZXRfaAogI2RlZmluZSBKU1Nl
dF9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2luY2x1ZGUgIk1hcEJhc2UuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLWNsYXNzIEpTU2V0IDogcHVi
bGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNzIEpTU2V0IDogcHVibGljIE1hcEJhc2U8
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+IHsKKyAgICB0eXBlZGVmIE1hcEJh
c2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+IEJhc2U7CiBwdWJsaWM6Ci0g
ICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBCYXNlOwogCiAgICAgZnJpZW5kIGNsYXNz
IEpTU2V0SXRlcmF0b3I7CiAKLSAgICAvLyBPdXIgbWFya2luZyBmdW5jdGlvbnMgZXhwZWN0IEVu
dHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQgaGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMg
YmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgY2xhc3MgRW50cnkgewotICAgIHByaXZhdGU6
Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX2tleTsKLQotICAgIHB1YmxpYzoKLSAg
ICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiBrZXkoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb25zdCBX
cml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCB2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICB7Ci0gICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmbV9rZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRLZXkoVk0mIHZtLCBj
b25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIGtleSkKLSAgICAgICAgewotICAgICAgICAgICAg
bV9rZXkuc2V0KHZtLCBvd25lciwga2V5KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0
S2V5V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlIGtleSkKLSAgICAgICAgewotICAgICAgICAg
ICAgbV9rZXkuc2V0V2l0aG91dFdyaXRlQmFycmllcihrZXkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRWYWx1ZShWTSYsIGNvbnN0IEpTQ2VsbCosIEpTVmFsdWUpCi0gICAgICAgIHsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBtX2tleS5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgTWFwRGF0
YUltcGw8RW50cnksIEpTU2V0SXRlcmF0b3I+IFNldERhdGE7Ci0KICAgICBERUNMQVJFX0VYUE9S
VF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewot
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKEpTU2V0VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSlNTZXQqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNTZXQ+KHZtLmhlYXApKSBKU1NldCh2bSwgc3RydWN0dXJlKTsK
LSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAg
IH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBz
dHJ1Y3R1cmUpOworICAgICAgICBtX21hcC0+YWRkKGV4ZWMsIGtleSk7CiAgICAgfQogCi0gICAg
Ym9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgc2l6ZV90IHNpemUoRXhlY1N0YXRl
Kik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhZGQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7
Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAgICBib29sIHJlbW92ZShFeGVjU3RhdGUq
LCBKU1ZhbHVlKTsKLQogcHJpdmF0ZToKICAgICBKU1NldChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX3NldERh
dGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlND
ZWxsKik7Ci0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0
aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2Vu
KTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNT
dGF0ZSopOwotCi0gICAgU2V0RGF0YSBtX3NldERhdGE7CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmNwcAkocmV2aXNpb24g
MjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpm
aW5pc2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAg
ICBtX3NldC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBzZXRJdGVyYXRvcih2
bSwgbV9zZXQtPmltcGwoKS0+aGVhZCgpKTsKIH0KIAogdm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC00Niw2ICs0
Nyw3IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwKICAgICBBU1NF
UlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlz
aXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9zZXQpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIp
OwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKQpAQCAtNTksOCArNjEsOSBAQCBKU1Zh
bHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2FsbEZyCiAKIEpTU2V0SXRlcmF0b3IqIEpT
U2V0SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBhdXRvIGNsb25lID0g
SlNTZXRJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCksIGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxP
YmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwgbV9zZXQuZ2V0KCksIG1fa2luZCk7Ci0g
ICAgY2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9yOworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRvclN0cnVjdHVyZSgpLCBtX3NldC5nZXQo
KSwgbV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0b3Iodm0sIG1faXRlci5nZXQoKSk7CiAg
ICAgcmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTYgQXBwbGUsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsNiAr
MzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0b3IgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNr
ZXREYXRhS2V5PiBIYXNoTWFwQnVja2V0VHlwZTsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTTm9u
RmluYWxPYmplY3QgQmFzZTsKIApAQCAtNTIsNDYgKzUzLDU5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIGJvb2wgbmV4dChDYWxsRnJhbWUqIGNhbGxG
cmFtZSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlw
ZSogYWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQogICAgIHsKLSAgICAgICAgV1RGOjpLZXlW
YWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsKLSAgICAgICAgaWYgKCFtX2l0ZXJhdG9y
Lm5leHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBwcmV2ID0gbV9pdGVyLmdl
dCgpOworICAgICAgICBpZiAoIXByZXYpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IG1faXRlci0+bmV4dCgpOworICAgICAg
ICB3aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRlZCgpKSB7CisgICAgICAgICAgICBwcmV2
ID0gYnVja2V0OworICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0LT5uZXh0KCk7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMt
PnZtKCksIG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0K
KyAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwgYnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0
ZXIgb24gdGhlIGxhc3QgdmFsdWUgc2luY2UgdGhlIGZpcnN0IHRoaW5nIHdlIGRvIGluIHRoaXMg
ZnVuY3Rpb24gaXMgY2FsbCBuZXh0KCkuCisgICAgICAgIHJldHVybiBidWNrZXQ7CisgICAgfQor
CisgICAgYm9vbCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSYgdmFsdWUpCisgICAgewor
ICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYWR2YW5jZUl0ZXIoZXhlYyk7Cisg
ICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAg
IGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZhbHVlIHx8IG1fa2luZCA9PSBJdGVyYXRlS2V5KQotICAg
ICAgICAgICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAgICAgICAgIHZhbHVlID0gYnVja2V0LT5r
ZXkoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxG
cmFtZSwgcGFpci5rZXksIHBhaXIua2V5KTsKKyAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUGFp
cihleGVjLCBidWNrZXQtPmtleSgpLCBidWNrZXQtPmtleSgpKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2goKQotICAgIHsKLSAgICAgICAgbV9pdGVyYXRv
ci5maW5pc2goKTsKLSAgICB9Ci0KICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3NldC5nZXQoKTsgfQogICAgIEpTU2V0SXRlcmF0b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwog
Ci0gICAgSlNTZXQ6OlNldERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNT
ZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1NldCogaXRlcmF0ZWRP
YmplY3QsIEl0ZXJhdGlvbktpbmQga2luZCkKKyAgICBKU1NldEl0ZXJhdG9yKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiwgSXRlcmF0aW9uS2luZCBraW5kKQogICAgICAgICA6
IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0
LT5tX3NldERhdGEuY3JlYXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAsIG1fa2luZChr
aW5kKQogICAgIHsKICAgICB9CiAKKyAgICB2b2lkIHNldEl0ZXJhdG9yKFZNJiB2bSwgSGFzaE1h
cEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAgICAgIG1faXRlci5zZXRNYXlCZU51bGwo
dm0sIHRoaXMsIGJ1Y2tldCk7IAorICAgIH0KKwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTVmFs
dWUgY3JlYXRlUGFpcihDYWxsRnJhbWUqLCBKU1ZhbHVlLCBKU1ZhbHVlKTsKICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBXcml0ZUJh
cnJpZXI8SlNTZXQ+IG1fc2V0OwotICAgIEpTU2V0OjpTZXREYXRhOjpJdGVyYXRvckRhdGEgbV9p
dGVyYXRvcjsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEJ1Y2tldFR5cGU+IG1faXRlcjsKICAg
ICBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1R5cGUuaAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDEwIEBAIGVudW0g
SlNUeXBlIDogdWludDhfdCB7CiAgICAgTW9kdWxlRW52aXJvbm1lbnRUeXBlLAogICAgIFJlZ0V4
cE9iamVjdFR5cGUsCiAgICAgUHJveHlPYmplY3RUeXBlLAorICAgIEpTTWFwVHlwZSwKKyAgICBK
U1NldFR5cGUsCiAKLSAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IFByb3h5T2JqZWN0VHlwZSwKKyAg
ICBMYXN0SlNDT2JqZWN0VHlwZSA9IEpTU2V0VHlwZSwKIH07CiAKIENPTVBJTEVfQVNTRVJUKHNp
emVvZihKU1R5cGUpID09IHNpemVvZih1aW50OF90KSwgc2l6ZW9mX2pzdHlwZV9pc19vbmVfYnl0
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEJhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1hcEJh
c2UuaCIKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXRUeXBlPgordm9pZCBNYXBCYXNl
PEhhc2hNYXBCdWNrZXRUeXBlPjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQoreworICAgIE1hcEJhc2UqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxN
YXBCYXNlKj4oY2VsbCk7CisgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tYXApOworfQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+CitzaXplX3QgTWFwQmFzZTxIYXNoTWFw
QnVja2V0VHlwZT46OmVzdGltYXRlZFNpemUoSlNDZWxsKiBjZWxsKQoreworICAgIHJldHVybiBC
YXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgc3RhdGljX2Nhc3Q8TWFwQmFzZSo+KGNlbGwpLT5t
X21hcC0+YXBwcm94aW1hdGVTaXplKCk7Cit9CisKK3RlbXBsYXRlIGNsYXNzIE1hcEJhc2U8SGFz
aE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj47Cit0ZW1wbGF0ZSBjbGFzcyBN
YXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PjsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJIYXNoTWFwSW1w
bC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+CitjbGFzcyBNYXBCYXNlIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5
cGU+IEhhc2hNYXBJbXBsVHlwZTsKKyAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsK
K3B1YmxpYzoKKworICAgIHR5cGVkZWYgSGFzaE1hcEJ1Y2tldFR5cGUgQnVja2V0VHlwZTsKKwor
ICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IHNpemUoRXhlY1N0YXRlKikKKyAgICB7CisgICAgICAg
IHJldHVybiBtX21hcC0+c2l6ZSgpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBo
YXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X21hcC0+aGFzKGV4ZWMsIGtleSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNs
ZWFyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAgICAgIG1fbWFwLT5jbGVhcihleGVjKTsK
KyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPnJlbW92ZShleGVjLCBr
ZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5k
QnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIHVpbnQzMl90IGhhc2gpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAtPmZpbmRCdWNrZXQoZXhlYywga2V5LCBoYXNoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSGFzaE1hcEltcGwoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihNYXBCYXNlPEhhc2hNYXBCdWNrZXRUeXBl
PiwgbV9tYXApOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUgSGFzaE1hcEltcGxUeXBlKiBp
bXBsKCkgeyByZXR1cm4gbV9tYXAuZ2V0KCk7IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24o
RXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgeworICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbih2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsK
KyAgICAgICAgSGFzaE1hcEltcGxUeXBlKiBpbXBsID0gSGFzaE1hcEltcGxUeXBlOjpjcmVhdGUo
ZXhlYywgdm0pOworICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBtX21hcC5zZXQodm0sIHRoaXMsIGltcGwpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIE1hcEJhc2UoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKworICAgIHN0
YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwqKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNp
dENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBXcml0ZUJhcnJpZXI8SGFz
aE1hcEltcGxUeXBlPiBtX21hcDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcENvbnN0cnVjdG9yLmNwcAkocmV2
aXNpb24gMjA1NDkyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29uc3Ry
dWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw5ICs2MSwxMSBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMtPmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0
KCk7CiAgICAgU3RydWN0dXJlKiBtYXBTdHJ1Y3R1cmUgPSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVh
dGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5uZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0
LT5tYXBTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgIGlm
IChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBKU01hcCogbWFwID0gSlNNYXA6OmNyZWF0ZShleGVjLCB2
bSwgbWFwU3RydWN0dXJlKTsKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7Ci0gICAgSlNNYXAqIG1h
cCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgbWFwU3RydWN0dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJh
YmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYgKGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobWFwKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yCiAgICAgSlNWYWx1ZSBy
ZXN1bHQ7CiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxs
RnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUs
IGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OCwxNCArNjgsMTMgQEAgdm9pZCBNYXBQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZN
JiB2bQogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+Y2xlYXIsIG1hcFByb3RvRnVuY0NsZWFyLCBEb250RW51bSwgMCk7CiAgICAg
SlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+
ZGVsZXRlS2V5d29yZCwgbWFwUHJvdG9GdW5jRGVsZXRlLCBEb250RW51bSwgMSk7Ci0gICAgSlND
X05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Z2V0
LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
X1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5oYXMsIG1hcFByb3RvRnVuY0hh
cywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5nZXQsIG1hcFByb3RvRnVuY0dldCwgRG9u
dEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKKyAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+aGFzLCBtYXBQcm90
b0Z1bmNIYXMsIERvbnRFbnVtLCAxLCBKU01hcEhhc0ludHJpbnNpYyk7CiAgICAgSlNDX05BVElW
RV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+c2V0LCBtYXBQ
cm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhP
VVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5rZXlzUHVibGlj
TmFtZSgpLCBtYXBQcm90b0Z1bmNLZXlzLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkudmFsdWVzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNWYWx1ZXMsIERvbnRFbnVtLCAwKTsK
IAotICAgIC8vIFByaXZhdGUgZ2V0IC8gc2V0IG9wZXJhdGlvbnMuCi0gICAgSlNDX05BVElWRV9G
VU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkuZ2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5jR2V0LCBEb250RW51bSwgMSk7CisgICAg
SlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZhdGVOYW1lKCksIG1hcFByb3RvRnVuY0dl
dCwgRG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS5z
ZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKIAogICAgIEpT
RnVuY3Rpb24qIGVudHJpZXMgPSBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
MCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZW50cmllc1B1YmxpY05hbWUoKS5z
dHJpbmcoKSwgbWFwUHJvdG9GdW5jRW50cmllcyk7CkBAIC05MSwxNiArOTAsMjEgQEAgQUxXQVlT
X0lOTElORSBzdGF0aWMgSlNNYXAqIGdldE1hcChDYWxsRgogICAgIFZNJiB2bSA9IGNhbGxGcmFt
ZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAg
ICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFs
dWUuaXNDZWxsKCkpKSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBj
cmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KLSAgICBKU01hcCogbWFwID0ganNEeW5hbWljQ2FzdDxKU01h
cCo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFtYXApIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
Y2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJNYXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBu
b24tTWFwIG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJl
dHVybiBtYXA7CisKKyAgICBpZiAoTElLRUxZKHRoaXNWYWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09
IEpTTWFwVHlwZSkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNNYXAqPih0aGlzVmFsdWUpOwor
ICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsIEFTQ0lJTGl0ZXJhbCgiTWFwIG9w
ZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3QiKSk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB2YWx1ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHZhbHVlLmlzQ2Vs
bCgpICYmIHZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0gSlNNYXBUeXBlKSk7CiB9CiAKIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCkBAIC0xODcsMTEgKzE5MSw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWFwUHJvdG9GdW4KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNy
ZWF0ZSh2bSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9y
U3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXkpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihqc0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7Ci19Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNT
RVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSkpOwpA
QCAtMjA0LDEzICsyMDMsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRl
RnVuYwogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlz
VmFsdWUoKSkpOwogICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganNDYXN0PEpTTWFwSXRl
cmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAgSlNWYWx1ZSBrZXksIHZhbHVlOwotICAg
IGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgaWYgKGl0ZXJh
dG9yLT5uZXh0S2V5VmFsdWUoZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgSlNBcnJheSog
cmVzdWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVjdEluZGV4KGV4ZWMsIDAsIGtleSk7CiAg
ICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAxLCB2YWx1ZSk7CiAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSk7CiAgICAgfQotICAg
IGl0ZXJhdG9yLT5maW5pc2goKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVh
bih0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5RGVzY3JpcHRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gMjA1NDkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTkxLDIyICsxOTEsNiBAQCB2b2lkIFByb3BlcnR5RGVzY3JpcHRvcjo6c2V0R2V0
dGVyKEpTVmFsCiAgICAgbV9hdHRyaWJ1dGVzICY9IH5SZWFkT25seTsKIH0KIAotLy8gU2VlIEVT
NS4xIDkuMTIKLWJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1Zh
bHVlIGIpCi17Ci0gICAgaWYgKCFhLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjpzdHJpY3RFcXVhbChleGVjLCBhLCBiKTsKLSAgICBpZiAoIWIuaXNOdW1iZXIoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGRvdWJsZSB4ID0gYS5hc051bWJlcigpOwotICAgIGRvdWJs
ZSB5ID0gYi5hc051bWJlcigpOwotICAgIGJvb2wgeElzTmFOID0gc3RkOjppc25hbih4KTsKLSAg
ICBib29sIHlJc05hTiA9IHN0ZDo6aXNuYW4oeSk7Ci0gICAgaWYgKHhJc05hTiB8fCB5SXNOYU4p
Ci0gICAgICAgIHJldHVybiB4SXNOYU4gJiYgeUlzTmFOOwotICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHgpID09IGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeSk7Ci19Ci0KIGJvb2wg
UHJvcGVydHlEZXNjcmlwdG9yOjplcXVhbFRvKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgUHJvcGVy
dHlEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKIHsKICAgICBpZiAob3RoZXIubV92YWx1ZS5pc0Vt
cHR5KCkgIT0gbV92YWx1ZS5pc0VtcHR5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiAyMDU0OTIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMzIsOSArMzIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgR2V0
dGVyU2V0dGVyOwogCi0vLyBTZWUgRVM1LjEgOS4xMgotYm9vbCBzYW1lVmFsdWUoRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0KIGNsYXNzIFByb3BlcnR5RGVzY3JpcHRvciB7CiBwdWJs
aWM6CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDIwNTQ5MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsOSArNjIsMTEgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGFzSW50ZXJu
YWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2JhbE9iamVjdCgpOwogICAgIFN0cnVjdHVy
ZSogc2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1
cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkp
OwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICBpZiAoVU5MSUtFTFkoc2NvcGUu
ZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
CisgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUoZXhlYywgdm0sIHNldFN0cnVjdHVyZSk7
CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRl
KGV4ZWMsIHNldFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3Vt
ZW50KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAy
MDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3Rv
dHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBTZXRJdGVyYXRvcgogCiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxG
cmFtZSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVy
YXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKLSAgICBpdGVyYXRv
ci0+ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJl
c3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0UHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCShyZXZp
c2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRQcm90b3R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgU2V0UHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRf
VFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5hZGQsIHNldFByb3RvRnVuY0FkZCwgRG9udEVu
dW0sIDEpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPmNsZWFyLCBzZXRQcm90b0Z1bmNDbGVhciwgRG9udEVudW0sIDApOwogICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMt
PmRlbGV0ZUtleXdvcmQsIHNldFByb3RvRnVuY0RlbGV0ZSwgRG9udEVudW0sIDEpOwotICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhh
cywgc2V0UHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9JTlRSSU5T
SUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgc2V0
UHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSwgSlNTZXRIYXNJbnRyaW5zaWMpOwogICAgIEpTQ19O
QVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0
aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCksIHNldFByb3RvRnVuY0VudHJpZXMsIERvbnRF
bnVtLCAwKTsKIAogICAgIEpTRnVuY3Rpb24qIHZhbHVlcyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2
bSwgZ2xvYmFsT2JqZWN0LCAwLCB2bS5wcm9wZXJ0eU5hbWVzLT5idWlsdGluTmFtZXMoKS52YWx1
ZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIHNldFByb3RvRnVuY1ZhbHVlcyk7CkBAIC04NSwxNiAr
ODUsMTQgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNTZXQqIGdldFNldChDYWxsRgogICAgIFZN
JiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19T
Q09QRSh2bSk7CiAKLSAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7CisgICAgaWYgKFVO
TElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CiAgICAgICAgIHRocm93Vk1FcnJvcihjYWxs
RnJhbWUsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVl
KSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBKU1NldCogc2V0ID0ganNE
eW5hbWljQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFzZXQpIHsKLSAgICAgICAg
dGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0
aW9uIGNhbGxlZCBvbiBub24tU2V0IG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotICAgIHJldHVybiBzZXQ7CisgICAgaWYgKExJS0VMWSh0aGlzVmFsdWUuYXNDZWxs
KCktPnR5cGUoKSA9PSBKU1NldFR5cGUpKQorICAgICAgICByZXR1cm4ganNDYXN0PEpTU2V0Kj4o
dGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxp
dGVyYWwoIlNldCBvcGVyYXRpb24gY2FsbGVkIG9uIG5vbi1TZXQgb2JqZWN0IikpOworICAgIHJl
dHVybiBudWxscHRyOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHNldFByb3Rv
RnVuY0FkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTE4NCw3ICsxODIsNiBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5jCiAgICAgICAgIHJlc3VsdEFycmF5LT5w
dXREaXJlY3RJbmRleChleGVjLCAwLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0KLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpOwogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDYgKzY1LDcgQEAKICNpbmNsdWRlICJKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmgiCiAjaW5j
bHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNpbmNsdWRlICJKU0xvY2suaCIKKyNpbmNs
dWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAi
SlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5
S2V5LmgiCkBAIC0yNTMsNiArMjU0LDEwIEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlw
ZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCiAgICAgd2ViQXNzZW1ibHlDb2Rl
QmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2VuZGlmCisgICAgaGFzaE1hcEJ1Y2tldFNl
dFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaGFzaE1hcEJ1Y2tl
dE1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFL
ZXlWYWx1ZT46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBoYXNo
TWFwSW1wbFNldFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIGhhc2hNYXBJbXBsTWFwU3RydWN0dXJlLnNldCgqdGhpcywgSGFzaE1hcEltcGw8
SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVlPj46OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKIAogICAgIGl0ZXJhdGlvblRlcm1pbmF0b3Iuc2V0KCp0
aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnRoaXMsIEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCksIDEpKSk7CiAgICAgbmF0aXZlU3RkRnVuY3Rpb25D
ZWxsU3RydWN0dXJlLnNldCgqdGhpcywgTmF0aXZlU3RkRnVuY3Rpb25DZWxsOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw2ICszMzQsMTAgQEAgcHVibGljOgogICAgIFN0
cm9uZzxTdHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
d2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFz
aE1hcEJ1Y2tldFNldFN0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBoYXNoTWFwQnVj
a2V0TWFwU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBJbXBsU2V0U3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhhc2hNYXBJbXBsTWFwU3RydWN0dXJlOwog
CiAgICAgU3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9uVGVybWluYXRvcjsKICAgICBTdHJvbmc8SlND
ZWxsPiBlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3I7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NDk2
KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxNi0wOS0wNiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBNYWtlIEpTTWFwIGFuZCBKU1NldCBmYXN0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlw
IFBpemxvLgorCisgICAgICAgIEkgbWFkZSBzX2ZsYWdDb3VudCBwdWJsaWMgc2luY2UgSlNDJ3Mg
SklUcyBub3cgdXNlIHRoaXMgZmllbGQuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBs
Lmg6CisKIDIwMTYtMDktMDYgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBFWFRFUk5fQyBmcm9tIFdURgpJbmRleDogU291cmNlL1dURi93dGYvdGV4
dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgJKHJldmlzaW9uIDIwNTQ5MikKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDkgQEAgcHJpdmF0ZToKICAgICB9Owog
CiAgICAgLy8gVGhlIGJvdHRvbSA2IGJpdHMgaW4gdGhlIGhhc2ggYXJlIGZsYWdzLgorcHVibGlj
OgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdDb3VudCA9IDY7Citwcml2YXRlOgog
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdNYXNrID0gKDF1IDw8IHNfZmxhZ0NvdW50
KSAtIDE7CiAgICAgQ09NUElMRV9BU1NFUlQoc19mbGFnQ291bnQgPD0gU3RyaW5nSGFzaGVyOjpm
bGFnQ291bnQsIFN0cmluZ0hhc2hlcl9yZXNlcnZlc19lbm91Z2hfYml0c19mb3JfU3RyaW5nSW1w
bF9mbGFncyk7CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfZmxhZ1N0cmluZ0tpbmRDb3Vu
dCA9IDQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxNi0wOS0wNiAg
U2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEpTTWFwIGFu
ZCBKU1NldCBmYXN0ZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2MDk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAg
ICAgICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9IYXNoTWFwSW1wbC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01hcEJhc2UuaDogQWRkZWQuCisgICAg
ICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNsb25lU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkNs
b25lRGVzZXJpYWxpemVyOjpkZXNlcmlhbGl6ZSk6CisKIDIwMTYtMDktMDYgIERhbmllbCBCYXRl
cyAgPGRhYmF0ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUgQXBwbGUtaW50ZXJuYWwg
YnVpbGQgZm9sbG93aW5nIDxodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjA1NDg4
PgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9IYXNoTWFw
SW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvSGFzaE1hcEltcGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3J1bnRpbWUvSGFzaE1hcEltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfSGFzaE1hcEltcGxfaAorI2RlZmluZSBXZWJD
b3JlX0ZXRF9IYXNoTWFwSW1wbF9oCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSGFzaE1hcElt
cGwuaD4KKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvcnVu
dGltZS9NYXBCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hl
YWRlcnMvcnVudGltZS9NYXBCYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL01hcEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQgQEAKKyNpZm5kZWYgV2ViQ29yZV9GV0RfTWFwQmFzZV9oCisjZGVmaW5lIFdlYkNvcmVf
RldEX01hcEJhc2VfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01hcEJhc2UuaD4KKyNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVk
U2NyaXB0VmFsdWUuY3BwCShyZXZpc2lvbiAyMDU0OTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzY4
LDcgKzEzNjgsNyBAQCBTZXJpYWxpemF0aW9uUmV0dXJuQ29kZSBDbG9uZVNlcmlhbGl6ZXI6CiAg
ICAgICAgICAgICBjYXNlIE1hcERhdGFTdGFydFZpc2l0RW50cnk6IHsKICAgICAgICAgICAgICAg
ICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRvciA9IG1hcEl0ZXJhdG9yU3RhY2subGFzdCgpOwogICAg
ICAgICAgICAgICAgIEpTVmFsdWUga2V5LCB2YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWl0
ZXJhdG9yLT5uZXh0S2V5VmFsdWUoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IWl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUobV9leGVjLCBrZXksIHZhbHVlKSkgewogICAgICAgICAg
ICAgICAgICAgICBtYXBJdGVyYXRvclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgICAg
ICAgICAgSlNPYmplY3QqIG9iamVjdCA9IGlucHV0T2JqZWN0U3RhY2subGFzdCgpOwogICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoanNEeW5hbWljQ2FzdDxKU01hcCo+KG9iamVjdCkpOwpAQCAt
MjU0NSw3ICsyNTQ1LDkgQEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVy
OgogICAgICAgICBtYXBPYmplY3RTdGFydFN0YXRlOiB7CiAgICAgICAgICAgICBpZiAob3V0cHV0
T2JqZWN0U3RhY2suc2l6ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKICAgICAgICAgICAg
ICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93RXJyb3Ip
OwotICAgICAgICAgICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUobV9leGVjLT52bSgpLCBt
X2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJlKCkpOworICAgICAgICAgICAgSlNNYXAqIG1hcCA9
IEpTTWFwOjpjcmVhdGUobV9leGVjLCBtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5tYXBT
dHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9leGVjLT5oYWRFeGNlcHRp
b24oKSkpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIG1fZ2NCdWZm
ZXIuYXBwZW5kKG1hcCk7CiAgICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQobWFw
KTsKICAgICAgICAgICAgIG1hcFN0YWNrLmFwcGVuZChtYXApOwpAQCAtMjU3NCw3ICsyNTc2LDkg
QEAgRGVzZXJpYWxpemF0aW9uUmVzdWx0IENsb25lRGVzZXJpYWxpemVyOgogICAgICAgICBzZXRP
YmplY3RTdGFydFN0YXRlOiB7CiAgICAgICAgICAgICBpZiAob3V0cHV0T2JqZWN0U3RhY2suc2l6
ZSgpID4gbWF4aW11bUZpbHRlclJlY3Vyc2lvbikKICAgICAgICAgICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3BhaXIoSlNWYWx1ZSgpLCBTdGFja092ZXJmbG93RXJyb3IpOwotICAgICAgICAgICAg
SlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUobV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+
c2V0U3RydWN0dXJlKCkpOworICAgICAgICAgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUo
bV9leGVjLCBtX2V4ZWMtPnZtKCksIG1fZ2xvYmFsT2JqZWN0LT5zZXRTdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICBpZiAoVU5MSUtFTFkobV9leGVjLT5oYWRFeGNlcHRpb24oKSkpCisgICAgICAg
ICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIG1fZ2NCdWZmZXIuYXBwZW5kKHNldCk7
CiAgICAgICAgICAgICBvdXRwdXRPYmplY3RTdGFjay5hcHBlbmQoc2V0KTsKICAgICAgICAgICAg
IHNldFN0YWNrLmFwcGVuZChzZXQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288057</attachid>
            <date>2016-09-06 15:52:05 -0700</date>
            <delta_ts>2016-09-06 16:24:01 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>c-backup.diff</filename>
            <type>text/plain</type>
            <size>181959</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDU1MTQpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDU1IEBACisyMDE2LTA5LTA2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgSlNNYXAgYW5kIEpTU2V0IGZhc3RlcgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwOTg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZGVuc2Ut
c2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGJlbmNoKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRoLWFkZGl0aW9ucy5qczogQWRkZWQuCisgICAgICAg
IChiYXIpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvbGFyZ2Ut
bWFwLWl0ZXJhdGlvbi13aXRoLW11dGF0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6Cisg
ICAgICAgIChmb28pOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0
aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGJhcik6CisgICAgICAgIChmb28pOgorICAgICAgICAq
IG1pY3JvYmVuY2htYXJrcy9tYXAtZ2V0LWdldC1jc2UuanM6IEFkZGVkLgorICAgICAgICAoYmFy
KToKKyAgICAgICAgKGZvbyk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL21hcC1oYXMtZ2V0
LWNzZS1vcHBvcnR1bml0eS5qczogQWRkZWQuCisgICAgICAgIChiYXIpOgorICAgICAgICAoZm9v
KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3Mvc3BhcnNlLXNldC5qczogQWRkZWQuCisgICAg
ICAgIChiZW5jaCk6CisgICAgICAgICogc3RyZXNzL21hcC1jc2UtY29ycmVjdG5lc3MuanM6IEFk
ZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKHRlc3RIYXMpOgorICAgICAgICAodGVz
dEdldCk6CisgICAgICAgIChmb28pOgorICAgICAgICAqIHN0cmVzcy9tYXAtaXRlcmF0aW9uLmpz
OiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgICh0ZXN0MSk6CisgICAgICAgICh0
ZXN0Mik6CisgICAgICAgICh0ZXN0Myk6CisgICAgICAgICh0ZXN0NCk6CisgICAgICAgICh0ZXN0
NSk6CisgICAgICAgICh0ZXN0Nik6CisgICAgICAgICh0ZXN0Nyk6CisgICAgICAgICh0ZXN0OCk6
CisgICAgICAgICh0ZXN0OSk6CisgICAgICAgICh0ZXN0MTApOgorICAgICAgICAodGVzdDExKToK
KyAgICAgICAgKHRlc3QxMik6CisgICAgICAgICh0ZXN0MTMpOgorICAgICAgICAodGVzdDE0KToK
KyAgICAgICAgKHRlc3QxNSk6CisgICAgICAgICh0ZXN0MTYpOgorICAgICAgICAodGVzdDE3KToK
KyAgICAgICAgKHRlc3QxOCk6CisKIDIwMTYtMDktMDYgIEJlbmphbWluIFBvdWxhaW4gIDxicG91
bGFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gTWFrZSBBcml0aENsejMyIHdvcmsgd2l0
aCBDZWxsIGFyZ3VtZW50cwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVuc2Utc2V0
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbnNlLXNldC5qcwko
cmV2aXNpb24gMCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbnNlLXNldC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACisoZnVuY3Rpb24oKSB7CisgICAgCisgICAgZnVu
Y3Rpb24gYmVuY2gobmFtZSwgZiwgYXJnKSB7CisgICAgICAgIHZhciBzdGFydCA9IG5ldyBEYXRl
OworICAgICAgICB2YXIgcmVzdWx0ID0gZihhcmcpOworICAgICAgICB2YXIgZW5kID0gbmV3IERh
dGU7CisgICAgICAgIGNvbnN0IHZlcmJvc2UgPSBmYWxzZTsKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBwcmludChuYW1lICsgIiAiICsgcmVzdWx0ICsgIiAiICsgKGVuZC1zdGFy
dCkgKyAibXMiKTsKKyAgICB9CisKKyAgICB2YXIgZGVuc2VTZXQgPSBuZXcgU2V0OworICAgIHZh
ciBleGNsdWRlU2V0ID0gWzEyMywgMTIzMCwgMTIzMDAsIDEyMzAwMCwgMjM0LCAyMzQwLCAyMzQw
MF07CisgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgNWU2OyArK2lkeCkgeworICAgICAgICBp
ZiAoZXhjbHVkZVNldC5pbmNsdWRlcyhpZHgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGRlbnNlU2V0LmFkZChpZHgpOworICAgIH0KKworICAgIGJlbmNoKCJEZW5zZSBTZXQgUHJv
cGVydHkgRXhpc3RlbmNlIiwgZnVuY3Rpb24ocykgeworICAgICAgICB2YXIgY291bnQgPSAwOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDVlNjsgKytpKQorICAgICAgICAgICAgaWYgKHMu
aGFzKGkpKQorICAgICAgICAgICAgICAgIGNvdW50KysKKyAgICAgICAgcmV0dXJuIGNvdW50Owor
ICAgIH0sIGRlbnNlU2V0KTsKKworfSkoKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtz
L2xhcmdlLW1hcC1pdGVyYXRpb24td2l0aC1hZGRpdGlvbnMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy9taWNyb2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi13aXRoLWFkZGl0aW9ucy5q
cwkocmV2aXNpb24gMCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2xhcmdlLW1hcC1pdGVy
YXRpb24td2l0aC1hZGRpdGlvbnMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAor
bGV0IGNvdW50ZXIgPSAwOworZnVuY3Rpb24gYmFyKG1hcCkgeworICAgIGZvciAobGV0IFtrZXks
IHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjk1KSB7Cisg
ICAgICAgICAgICBtYXAuc2V0KCIiICsgY291bnRlciwgY291bnRlcik7CisgICAgICAgICAgICAr
K2NvdW50ZXI7CisgICAgICAgIH0KKyAgICB9Cit9Citub0lubGluZShiYXIpOworCitmdW5jdGlv
biBmb28oKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwOyBpKyspCisgICAgICAgIG1hcC5zZXQoaSwgaSsxKTsKKworICAgIGxldCBzdGFydCA9
IERhdGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAg
YmFyKG1hcCk7CisgICAgY29uc3QgdmVyYm9zZSA9IGZhbHNlOworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBwcmludChEYXRlLm5vdygpIC0gc3RhcnQpOworCit9Citmb28oKTsKSW5kZXg6IEpT
VGVzdHMvbWljcm9iZW5jaG1hcmtzL2xhcmdlLW1hcC1pdGVyYXRpb24td2l0aC1tdXRhdGlvbi5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9sYXJnZS1tYXAtaXRlcmF0
aW9uLXdpdGgtbXV0YXRpb24uanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9sYXJnZS1tYXAtaXRlcmF0aW9uLXdpdGgtbXV0YXRpb24uanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24gYmFyKG1hcCkgeworICAgIGZvciAobGV0IFtrZXks
IHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgaWYgKHZhbHVlIC0gMSAhPT0ga2V5KQorICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgaXRlcmF0aW9uISIpOworICAgICAgICBpZiAoTWF0
aC5yYW5kb20oKSA+IDAuOTUpIHsKKyAgICAgICAgICAgIG1hcC5kZWxldGUoa2V5KTsKKyAgICAg
ICAgfQorICAgIH0KK30KK25vSW5saW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBs
ZXQgbWFwID0gbmV3IE1hcDsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDgwMDAwOyBpKyspCisg
ICAgICAgIG1hcC5zZXQoaSwgaSsxKTsKKworICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7Cisg
ICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICAgICAgYmFyKG1hcCk7CisgICAg
Y29uc3QgdmVyYm9zZSA9IGZhbHNlOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChE
YXRlLm5vdygpIC0gc3RhcnQpOworCit9Citmb28oKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL2xhcmdlLW1hcC1pdGVyYXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNy
b2JlbmNobWFya3MvbGFyZ2UtbWFwLWl0ZXJhdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2xhcmdlLW1hcC1pdGVyYXRpb24uanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMiBAQAorZnVuY3Rpb24gYmFyKG1hcCkgeworICAgIGZvciAobGV0IFtrZXks
IHZhbHVlXSBvZiBtYXApIHsKKyAgICAgICAgaWYgKHZhbHVlIC0gMSAhPT0ga2V5KQorICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgaXRlcmF0aW9uISIpOworICAgIH0KK30KK25vSW5s
aW5lKGJhcik7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKyspCisgICAgICAgIG1hcC5zZXQoaSwgaSsx
KTsKKworICAgIGxldCBzdGFydCA9IERhdGUubm93KCk7CisgICAgZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDA7IGkrKykKKyAgICAgICAgYmFyKG1hcCk7CisgICAgY29uc3QgdmVyYm9zZSA9IGZhbHNl
OworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChEYXRlLm5vdygpIC0gc3RhcnQpOwor
Cit9Citmb28oKTsKSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL21hcC1nZXQtZ2V0LWNz
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9tYXAtZ2V0LWdldC1j
c2UuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9tYXAtZ2V0LWdl
dC1jc2UuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gYmFyKG1h
cCwgcCkgeworICAgIHJldHVybiBtYXAuZ2V0KHApICsgbWFwLmdldChwKTsKK30KK25vSW5saW5l
KGJhcik7CisKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBs
ZXQgaXRlbXMgPSBbCisgICAgICAgIFsxMCwgNTBdLAorICAgICAgICBbIjQ1MCIsIDc4XSwKKyAg
ICAgICAgW3t9LCB7fV0sCisgICAgICAgIFtTeW1ib2woKSwgdHJ1ZV0sCisgICAgICAgIFt1bmRl
ZmluZWQsIG51bGxdLAorICAgICAgICBbdHJ1ZSwgbnVsbF0sCisgICAgICAgIFtmYWxzZSwgdHJ1
ZV0sCisgICAgICAgIFs0NS44Nywge31dCisgICAgXTsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1
ZV0gb2YgaXRlbXMpCisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAgbGV0IHN0YXJ0
ID0gRGF0ZS5ub3coKTsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDUwMDAwMDA7IGkrKykKKyAg
ICAgICAgYmFyKG1hcCwgaXRlbXNbaSAlIGl0ZW1zLmxlbmd0aF1bMF0pOworICAgIGNvbnN0IHZl
cmJvc2UgPSBmYWxzZTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgcHJpbnQoRGF0ZS5ub3co
KSAtIHN0YXJ0KTsKK30KK2ZvbygpOwpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvbWFw
LWhhcy1nZXQtY3NlLW9wcG9ydHVuaXR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL21hcC1oYXMtZ2V0LWNzZS1vcHBvcnR1bml0eS5qcwkocmV2aXNpb24gMCkKKysr
IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL21hcC1oYXMtZ2V0LWNzZS1vcHBvcnR1bml0eS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4IEBACitmdW5jdGlvbiBiYXIobWFwLCBwKSB7Cisg
ICAgaWYgKG1hcC5oYXMocCkpCisgICAgICAgIHJldHVybiBtYXAuZ2V0KHApOworfQorbm9Jbmxp
bmUoYmFyKTsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAg
IGxldCBpdGVtcyA9IFsKKyAgICAgICAgWzEwLCA1MF0sCisgICAgICAgIFsiNDUwIiwgNzhdLAor
ICAgICAgICBbe30sIHt9XSwKKyAgICAgICAgW1N5bWJvbCgpLCB0cnVlXSwKKyAgICAgICAgW3Vu
ZGVmaW5lZCwgbnVsbF0sCisgICAgICAgIFt0cnVlLCBudWxsXSwKKyAgICAgICAgW2ZhbHNlLCB0
cnVlXSwKKyAgICAgICAgWzQ1Ljg3LCB7fV0KKyAgICBdOworICAgIGZvciAobGV0IFtrZXksIHZh
bHVlXSBvZiBpdGVtcykKKyAgICAgICAgbWFwLnNldChrZXksIHZhbHVlKTsKKyAgICBsZXQgc3Rh
cnQgPSBEYXRlLm5vdygpOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNTAwMDAwMDsgaSsrKQor
ICAgICAgICBiYXIobWFwLCBpdGVtc1tpICUgaXRlbXMubGVuZ3RoXVswXSk7CisgICAgY29uc3Qg
dmVyYm9zZSA9IGZhbHNlOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludChEYXRlLm5v
dygpIC0gc3RhcnQpOworfQorZm9vKCk7CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9z
cGFyc2Utc2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3NwYXJz
ZS1zZXQuanMJKHJldmlzaW9uIDApCisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9zcGFyc2Ut
c2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKKyhmdW5jdGlvbigpIHsKKyAg
ICAKKyAgICBmdW5jdGlvbiBiZW5jaChuYW1lLCBmLCBhcmcpIHsKKyAgICAgICAgdmFyIHN0YXJ0
ID0gbmV3IERhdGU7CisgICAgICAgIHZhciByZXN1bHQgPSBmKGFyZyk7CisgICAgICAgIHZhciBl
bmQgPSBuZXcgRGF0ZTsKKyAgICAgICAgY29uc3QgdmVyYm9zZSA9IGZhbHNlOworICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIHByaW50KG5hbWUgKyAiICIgKyByZXN1bHQgKyAiICIg
KyAoZW5kLXN0YXJ0KSArICJtcyIpOworICAgIH0KKworCisgICAgdmFyIHNwYXJzZVNldCA9IG5l
dyBTZXQ7CisgICAgZm9yICh2YXIgeCBvZiBbMTIzLCAxMjMwLCAxMjMwMCwgMTIzMDAwLCAyMzQs
IDIzNDAsIDIzNDAwXSkgeworICAgICAgICBzcGFyc2VTZXQuYWRkKHgpOworICAgIH0KKworICAg
IGJlbmNoKCJTcGFyc2UgU2V0IFByb3BlcnR5IEV4aXN0ZW5jZSIsIGZ1bmN0aW9uKHMpIHsKKyAg
ICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1ZTY7ICsr
aSkKKyAgICAgICAgICAgIGlmIChzLmhhcyhpKSkKKyAgICAgICAgICAgICAgICBjb3VudCsrCisg
ICAgICAgIHJldHVybiBjb3VudDsKKyAgICB9LCBzcGFyc2VTZXQpOworfSkoKTsKSW5kZXg6IEpT
VGVzdHMvc3RyZXNzL21hcC1jc2UtY29ycmVjdG5lc3MuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0
cy9zdHJlc3MvbWFwLWNzZS1jb3JyZWN0bmVzcy5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVzdHMv
c3RyZXNzL21hcC1jc2UtY29ycmVjdG5lc3MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NiBAQAorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiQmFkIHJlc3VsdCEiKTsKK30KK25vSW5saW5lKGFzc2VydCk7CisKK2Z1bmN0aW9u
IHRlc3RIYXMobWFwLCBrZXksIGYpIHsKKyAgICBsZXQgZmlyc3QgPSBtYXAuaGFzKGtleSk7Cisg
ICAgZigpOworICAgIGxldCBzZWNvbmQgPSBtYXAuaGFzKGtleSk7CisgICAgcmV0dXJuIHtmaXJz
dCwgc2Vjb25kfTsKK30KK25vSW5saW5lKHRlc3RIYXMpOworCitmdW5jdGlvbiB0ZXN0R2V0KG1h
cCwga2V5LCBmKSB7CisgICAgbGV0IGZpcnN0ID0gbWFwLmdldChrZXkpOworICAgIGYoKTsKKyAg
ICBsZXQgc2Vjb25kID0gbWFwLmdldChrZXkpOworICAgIHJldHVybiB7Zmlyc3QsIHNlY29uZH07
Cit9Citub0lubGluZSh0ZXN0R2V0KTsKKworZnVuY3Rpb24gZm9vKCkgeworICAgIGxldCBtYXAg
PSBuZXcgTWFwOworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKyAgICAg
ICAgbGV0IGtleSA9IGk7CisgICAgICAgIG1hcC5zZXQoa2V5LCBrZXkpOworICAgICAgICBsZXQg
ZiA9ICgpID0+IG1hcC5kZWxldGUoa2V5KTsKKyAgICAgICAgbm9JbmxpbmUoZik7CisgICAgICAg
IGxldCB7Zmlyc3QsIHNlY29uZH0gPSB0ZXN0SGFzKG1hcCwga2V5LCBmKTsKKyAgICAgICAgYXNz
ZXJ0KGZpcnN0KTsKKyAgICAgICAgYXNzZXJ0KCFzZWNvbmQpOworICAgIH0KKyAgICBmb3IgKGxl
dCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGxldCBrZXkgPSBpOworICAgICAg
ICBtYXAuc2V0KGtleSwga2V5KTsKKyAgICAgICAgbGV0IGYgPSAoKSA9PiB7fTsKKyAgICAgICAg
bm9JbmxpbmUoZik7CisgICAgICAgIGxldCB7Zmlyc3QsIHNlY29uZH0gPSB0ZXN0SGFzKG1hcCwg
a2V5LCBmKTsKKyAgICAgICAgYXNzZXJ0KGZpcnN0KTsKKyAgICAgICAgYXNzZXJ0KHNlY29uZCk7
CisgICAgfQorCisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAg
ICAgIGxldCBrZXkgPSBpOworICAgICAgICBsZXQgdmFsdWUgPSB7fTsKKyAgICAgICAgbWFwLnNl
dChrZXksIHZhbHVlKTsKKyAgICAgICAgbGV0IGYgPSAoKSA9PiBtYXAuZGVsZXRlKGtleSk7Cisg
ICAgICAgIG5vSW5saW5lKGYpOworICAgICAgICBsZXQge2ZpcnN0LCBzZWNvbmR9ID0gdGVzdEdl
dChtYXAsIGtleSwgZik7CisgICAgICAgIGFzc2VydChmaXJzdCA9PT0gdmFsdWUpOworICAgICAg
ICBhc3NlcnQoc2Vjb25kID09PSB1bmRlZmluZWQpOworICAgIH0KKyAgICBmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDAwMDsgaSsrKSB7CisgICAgICAgIGxldCBrZXkgPSBpOworICAgICAgICBsZXQg
dmFsdWUgPSB7fTsKKyAgICAgICAgbWFwLnNldChrZXksIHZhbHVlKTsKKyAgICAgICAgbGV0IGYg
PSAoKSA9PiB7fTsKKyAgICAgICAgbm9JbmxpbmUoZik7CisgICAgICAgIGxldCB7Zmlyc3QsIHNl
Y29uZH0gPSB0ZXN0R2V0KG1hcCwga2V5LCBmKTsKKyAgICAgICAgYXNzZXJ0KGZpcnN0ID09PSB2
YWx1ZSk7CisgICAgICAgIGFzc2VydChzZWNvbmQgPT09IHZhbHVlKTsKKyAgICB9Cit9Citmb28o
KTsKSW5kZXg6IEpTVGVzdHMvc3RyZXNzL21hcC1pdGVyYXRpb24uanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SlNUZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIEpTVGVzdHMv
c3RyZXNzL21hcC1pdGVyYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOTUgQEAK
K2Z1bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkJhZCByZXN1bHQhIik7Cit9Citub0lubGluZShhc3NlcnQpOworCitmdW5jdGlvbiB0ZXN0
MSgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7CisgICAg
bGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOworICAgIGxldCB7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KHZhbHVlWzBdID09PSAyMCk7CisgICAgYXNzZXJ0
KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICAoe3ZhbHVlLCBkb25l
fSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09
PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0ZXN0
MSgpOworCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBt
YXAuc2V0KDIwLCAzMCk7CisgICAgbGV0IGl0ZXIgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOwor
ICAgIGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KHZhbHVlWzBd
ID09PSAyMCk7CisgICAgYXNzZXJ0KHZhbHVlWzFdID09PSAzMCk7CisgICAgYXNzZXJ0KCFkb25l
KTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydChkb25l
KTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7CisKKyAgICBtYXAuc2V0KDQwLCA1
MCk7CisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUp
OworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBp
IDwgMTAwOyBpKyspCisgICAgdGVzdDIoKTsKKworZnVuY3Rpb24gdGVzdDMoKSB7CisgICAgbGV0
IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYw
KTsKKyAgICBsZXQgaXRlciA9IG1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7CisgICAgbGV0IHt2YWx1
ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAgICBhc3NlcnQodmFsdWVbMF0gPT09IDIwKTsKKyAg
ICBhc3NlcnQodmFsdWVbMV0gPT09IDMwKTsKKyAgICBhc3NlcnQoIWRvbmUpOworCisgICAgKHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3Nl
cnQodmFsdWVbMF0gPT09IDUwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0gPT09IDYwKTsKKworICAg
IG1hcC5zZXQoImZvbyIsICJiYXIiKTsKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgp
KTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gImZvbyIpOwor
ICAgIGFzc2VydCh2YWx1ZVsxXSA9PT0gImJhciIpOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBp
dGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5k
ZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDMoKTsK
KworZnVuY3Rpb24gdGVzdDQoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNl
dCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9IG1hcFtTeW1i
b2wuaXRlcmF0b3JdKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKTsKKyAg
ICBhc3NlcnQodmFsdWVbMF0gPT09IDIwKTsKKyAgICBhc3NlcnQodmFsdWVbMV0gPT09IDMwKTsK
KyAgICBhc3NlcnQoIWRvbmUpOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICAoe3ZhbHVlLCBk
b25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVl
ID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAgICB0
ZXN0NCgpOworCitmdW5jdGlvbiB0ZXN0NSgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAg
ICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0g
bWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4
dCgpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gMjApOworICAgIGFzc2VydCh2YWx1ZVsxXSA9
PT0gMzApOworICAgIGFzc2VydCghZG9uZSk7CisKKyAgICBtYXAuY2xlYXIoKTsKKyAgICBtYXAu
c2V0KDUwLCA2MCk7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKTsKKyAgICBh
c3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZVswXSA9PT0gNTApOworICAgIGFzc2VydCh2
YWx1ZVsxXSA9PT0gNjApOworCisgICAgKHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7Cisg
ICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2Zv
ciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDUoKTsKKyAKK2Z1bmN0aW9uIHRl
c3Q2KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAg
ICBsZXQgaSA9IDA7CisgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIG1hcCkgeworICAgICAg
ICBtYXAuZGVsZXRlKGtleSk7CisgICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7CisgICAgICAg
IGkrKzsKKyAgICAgICAgaWYgKGkgPT09IDEwMDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgYXNzZXJ0KGkgPT09IDEwMDApOworfQordGVzdDYoKTsKKworZnVuY3Rpb24gdGVzdDco
KSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIGxl
dCBpID0gMDsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7CisgICAgICAgIG1h
cC5jbGVhcigpOworICAgICAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworICAgICAgICBpKys7Cisg
ICAgICAgIGlmIChpID09PSAxMDAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGFz
c2VydChpID09PSAxMDAwKTsKK30KK3Rlc3Q3KCk7CisKK2Z1bmN0aW9uIHRlc3Q4KCkgeworICAg
IGxldCBtYXAgPSBuZXcgTWFwOworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBmb3IgKGxldCBp
ID0gMDsgaSA8IDUwMDsgaSsrKQorICAgICAgICBtYXAuc2V0KGksIGkpOworICAgIGxldCBpID0g
MDsKKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgbWFwKSB7CisgICAgICAgIGFzc2VydChr
ZXkgPT09IHZhbHVlKTsKKyAgICAgICAgaSsrOworICAgICAgICBpZiAoa2V5ID09PSAyNTApCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgYXNzZXJ0KGkgPT09IDI1MSk7Cit9Cit0ZXN0
OCgpOworCitmdW5jdGlvbiB0ZXN0OSgpIHsKKyAgICBhc3NlcnQoMS8oLTApID09PSAtSW5maW5p
dHkpOworCisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAgbWFwLnNldCgtMCwgNTApOyAvLyBX
ZSBzaG91bGQgbm9ybWFsaXplIC0wIHRvICswIGluIHRoZSBrZXkuCisgICAgZm9yIChsZXQgW2tl
eSwgdmFsdWVdIG9mIG1hcCkgeworICAgICAgICBhc3NlcnQoMS9rZXkgPT09IEluZmluaXR5KTsK
KyAgICB9CisgICAgYXNzZXJ0KG1hcC5nZXQoMC4wKSA9PT0gNTApOworICAgIGFzc2VydChtYXAu
Z2V0KDApID09PSA1MCk7CisgICAgYXNzZXJ0KG1hcC5nZXQoLTApID09PSA1MCk7CisgICAgYXNz
ZXJ0KG1hcC5nZXQoKzApID09PSA1MCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsr
KQorICAgIHRlc3Q5KCk7CisKK2Z1bmN0aW9uIHRlc3QxMCgpIHsKKyAgICBsZXQgbWFwID0gbmV3
IE1hcDsKKyAgICBtYXAuc2V0KCJuZWdaZXJvIiwgLTApOyAvLyBXZSBzaG91bGQgKm5vdCogbm9y
bWFsaXplIC0wIHRvICswIGluIHRoZSB2YWx1ZS4KKyAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0g
b2YgbWFwKSB7CisgICAgICAgIGFzc2VydCgxL3ZhbHVlID09PSAtSW5maW5pdHkpOworICAgIH0K
K30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDEwKCk7CisKK2Z1bmN0
aW9uIHRlc3QxMSgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAz
MCk7CisgICAgbGV0IGl0ZXIgPSBtYXAua2V5cygpOworICAgIGxldCB7dmFsdWUsIGRvbmV9ID0g
aXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDIw
KTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOworICAgIGFzc2VydChkb25l
KTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7CisKKyAgICAoe3ZhbHVlLCBkb25l
fSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09
IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRlc3Qx
MSgpOworCitmdW5jdGlvbiB0ZXN0MTIoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7CisgICAg
bWFwLnNldCgyMCwgMzApOworICAgIGxldCBpdGVyID0gbWFwLnZhbHVlcygpOworICAgIGxldCB7
dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3Nl
cnQodmFsdWUgPT09IDMwKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpOwor
ICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7CisKKyAg
ICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBh
c3NlcnQodmFsdWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsg
aSsrKQorICAgIHRlc3QxMigpOworCitmdW5jdGlvbiB0ZXN0MTMoKSB7CisgICAgbGV0IG1hcCA9
IG5ldyBNYXA7CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAg
ICBsZXQgaXRlciA9IG1hcC5rZXlzKCk7CisgICAgbGV0IHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5l
eHQoKTsKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gMjApOworCisg
ICAgbWFwLmNsZWFyKCk7CisgICAgbWFwLnNldCgiZm9vIiwgImJhciIpOworCisgICAgKHt2YWx1
ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQo
dmFsdWUgPT09ICJmb28iKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisg
ICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2Zv
ciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVzdDEzKCk7CisKK2Z1bmN0aW9uIHRl
c3QxNCgpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAgICBtYXAuc2V0KDIwLCAzMCk7Cisg
ICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0gbWFwLnZhbHVlcygpOworICAgIGxl
dCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAgYXNzZXJ0KCFkb25lKTsKKyAgICBh
c3NlcnQodmFsdWUgPT09IDMwKTsKKworICAgIG1hcC5jbGVhcigpOworICAgIG1hcC5zZXQoImZv
byIsICJiYXIiKTsKKworICAgIDsoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFz
c2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAiYmFyIik7CisKKyAgICAoe3ZhbHVl
LCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAg
IHRlc3QxNCgpOworCitmdW5jdGlvbiB0ZXN0MTUoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7
CisgICAgbWFwLnNldCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRl
ciA9IG1hcC5rZXlzKCk7CisKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpOwor
ICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAyMCk7CisKKyAgICA7KHt2
YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFzc2Vy
dCh2YWx1ZSA9PT0gNTApOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBtYXAuc2V0KCJmb28i
LCAiYmFyIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2Vy
dCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAiZm9vIik7CisKKyAgICAoe3ZhbHVlLCBk
b25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFsdWUg
PT09IHVuZGVmaW5lZCk7Cit9Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDsgaSsrKQorICAgIHRl
c3QxNSgpOworCitmdW5jdGlvbiB0ZXN0MTYoKSB7CisgICAgbGV0IG1hcCA9IG5ldyBNYXA7Cisg
ICAgbWFwLnNldCgyMCwgMzApOworICAgIG1hcC5zZXQoNTAsIDYwKTsKKyAgICBsZXQgaXRlciA9
IG1hcC52YWx1ZXMoKTsKKworICAgIGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7Cisg
ICAgYXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDMwKTsKKworICAgIDsoe3Zh
bHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0
KHZhbHVlID09PSA2MCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIG1hcC5zZXQoImZvbyIs
ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0
KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09ICJiYXIiKTsKKworICAgICh7dmFsdWUsIGRv
bmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9
PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBpKyspCisgICAgdGVz
dDE2KCk7CisKK2Z1bmN0aW9uIHRlc3QxNygpIHsKKyAgICBsZXQgbWFwID0gbmV3IE1hcDsKKyAg
ICBtYXAuc2V0KDIwLCAzMCk7CisgICAgbWFwLnNldCg1MCwgNjApOworICAgIGxldCBpdGVyID0g
bWFwLmtleXMoKTsKKworICAgIGxldCB7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCk7CisgICAg
YXNzZXJ0KCFkb25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09IDIwKTsKKworICAgIDsoe3ZhbHVl
LCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlID09PSA1MCk7CisKKyAgICBtYXAuY2xlYXIoKTsKKworICAgIG1hcC5zZXQoImZvbyIsICJi
YXIiKTsKKworICAgICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KCFk
b25lKTsKKyAgICBhc3NlcnQodmFsdWUgPT09ICJmb28iKTsKKworICAgICh7dmFsdWUsIGRvbmV9
ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFzc2VydCh2YWx1ZSA9PT0g
dW5kZWZpbmVkKTsKKworICAgIG1hcC5zZXQoImhlbGxvIiwgIndvcmxkIik7CisgICAgKHt2YWx1
ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoZG9uZSk7CisgICAgYXNzZXJ0KHZh
bHVlID09PSB1bmRlZmluZWQpOworfQorZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7IGkrKykKKyAg
ICB0ZXN0MTcoKTsKKworZnVuY3Rpb24gdGVzdDE4KCkgeworICAgIGxldCBtYXAgPSBuZXcgTWFw
OworICAgIG1hcC5zZXQoMjAsIDMwKTsKKyAgICBtYXAuc2V0KDUwLCA2MCk7CisgICAgbGV0IGl0
ZXIgPSBtYXAudmFsdWVzKCk7CisKKyAgICBsZXQge3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgp
OworICAgIGFzc2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAzMCk7CisKKyAgICA7
KHt2YWx1ZSwgZG9uZX0gPSBpdGVyLm5leHQoKSkKKyAgICBhc3NlcnQoIWRvbmUpOworICAgIGFz
c2VydCh2YWx1ZSA9PT0gNjApOworCisgICAgbWFwLmNsZWFyKCk7CisKKyAgICBtYXAuc2V0KCJm
b28iLCAiYmFyIik7CisKKyAgICAoe3ZhbHVlLCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFz
c2VydCghZG9uZSk7CisgICAgYXNzZXJ0KHZhbHVlID09PSAiYmFyIik7CisKKyAgICAoe3ZhbHVl
LCBkb25lfSA9IGl0ZXIubmV4dCgpKQorICAgIGFzc2VydChkb25lKTsKKyAgICBhc3NlcnQodmFs
dWUgPT09IHVuZGVmaW5lZCk7CisKKyAgICBtYXAuc2V0KCJoZWxsbyIsICJ3b3JsZCIpOworICAg
ICh7dmFsdWUsIGRvbmV9ID0gaXRlci5uZXh0KCkpCisgICAgYXNzZXJ0KGRvbmUpOworICAgIGFz
c2VydCh2YWx1ZSA9PT0gdW5kZWZpbmVkKTsKK30KK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyBp
KyspCisgICAgdGVzdDE4KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwzMDMgQEAKKzIwMTYtMDktMDYgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBh
cHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBKU01hcCBhbmQgSlNTZXQgZmFzdGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjA5ODkKKworICAgICAg
ICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUaGlzIHBhdGNoIHJldmFtcHMg
aG93IHdlIGltcGxlbWVudCBNYXAgYW5kIFNldC4gSXQgdXNlcworICAgICAgICBhIG5ldyBoYXNo
IG1hcCBpbXBsZW1lbnRhdGlvbi4gVGhlIGhhc2ggbWFwIHVzZXMgbGluZWFyCisgICAgICAgIHBy
b2JpbmcgYW5kIGl0IHVzZXMgV2FuZydzIDY0IGJpdCBoYXNoIGZ1bmN0aW9uIGZvciBKU1ZhbHVl
cworICAgICAgICB0aGF0IGFyZW4ndCBzdHJpbmdzLiBTdHJpbmdzIHVzZSBTdHJpbmdJbXBsJ3Mg
aGFzaCBmdW5jdGlvbi4KKyAgICAgICAgVGhlIHJlYXNvbiBJIHdhbnRlZCB0byByb2xsIG91ciBv
d24gSGFzaFRhYmxlIGlzIHR3b2ZvbGQ6CisgICAgICAgIEkgZGlkbid0IHdhbnQgdG8gaW5saW5l
IFdURjo6SGFzaE1hcCdzIGltcGxlbWVudGF0aW9uIGludG8gb3VyCisgICAgICAgIEpJVCwgc2lu
Y2UgdGhhdCBzZWVtcyBlcnJvciBwcm9uZSBhbmQgdW5tYWludGFpbmFibGUuIEFsc28sIEkgd2Fu
dGVkCisgICAgICAgIGEgZGlmZmVyZW50IHN0cnVjdHVyZSBmb3IgaGFzaCBtYXAgYnVja2V0cyB3
aGVyZSBidWNrZXRzIGFsc28gZXhpc3QgaW4KKyAgICAgICAgYSBsaW5rZWQgbGlzdC4KKworICAg
ICAgICBUaGUgcmVhc29uIGZvciBtYWtpbmcgYnVja2V0cyBwYXJ0IG9mIGEgbGlua2VkIGxpc3Qg
aXMgdGhhdCBpdGVyYXRpb24KKyAgICAgICAgaXMgbm93IHNpbXBsZS4gSXRlcmF0aW9uIHdvcmtz
IGJ5IGp1c3QgdHJhdmVyc2luZyBhIGxpbmtlZCBsaXN0LgorICAgICAgICBUaGlzIGRlc2lnbiBh
bHNvIGFsbG93cyBmb3IgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gd2hlbiBkb2luZyBpdGVyYXRp
b24KKyAgICAgICAgd2hpbGUgdGhlIGhhc2ggdGFibGUgaXMgbXV0YXRpbmcuIFdoZW5ldmVyIHdl
IHJlbW92ZSBhIGJ1Y2tldCBmcm9tCisgICAgICAgIHRoZSBoYXNoIHRhYmxlLCBpdCBpcyByZW1v
dmVkIGZyb20gdGhlIGxpc3QsIG1lYW5pbmcgaXRlbXMgaW4gdGhlCisgICAgICAgIGxpc3QgZG9u
J3QgcG9pbnQgdG8gaXQuIEhvd2V2ZXIsIHRoZSByZW1vdmVkIGJ1Y2tldCB3aWxsIHN0aWxsIHBv
aW50CisgICAgICAgIHRvIHRoaW5ncyB0aGF0IGFyZSBlaXRoZXIgaW4gdGhlIGxpc3QsIG9yIGhh
dmUgYWxzbyBiZWVuIHJlbW92ZWQuCisgICAgICAgIGUuZywgZnJvbSBhIHJlbW92ZWQgYnVja2V0
LCB5b3UgY2FuIGFsd2F5cyBmb2xsb3cgcG9pbnRlcnMgdW50aWwgeW91CisgICAgICAgIGVpdGhl
ciBmaW5kIGFuIGl0ZW0gaW4gdGhlIGxpc3QsIG9yIHlvdSBmaW5kIHRoZSB0YWlsIG9mIHRoZSBs
aXN0LgorICAgICAgICBUaGlzIGlzIGEgcmVhbGx5IG5pY2UgcHJvcGVydHkgYmVjYXVzZSBpdCBt
ZWFucyB0aGF0IGEgTWFwIG9yIFNldAorICAgICAgICBkb2VzIG5vdCBuZWVkIHRvIHJlYXNvbiBh
Ym91dCB0aGUgYWxsIHRoZSBpdGVyYXRvcnMgdGhhdCBwb2ludAorICAgICAgICBpbnRvIGl0cyBs
aXN0LiBBbHNvLCB3aGVuZXZlciB3ZSBhZGQgaXRlbXMgdG8gdGhlIE1hcCBvciBTZXQsIHdlCisg
ICAgICAgIGhpamFjayB0aGUgdGFpbCBhcyB0aGUgbmV3IGl0ZW0sIGFuZCBtYWtlIHRoZSBuZXcg
aXRlbSBwb2ludCB0byBhIG5ld2x5CisgICAgICAgIGNyZWF0ZWQgdGFpbC4gVGhpcyBtZWFucyB0
aGF0IGFueSBpdGVyYXRvciB0aGF0IHBvaW50ZWQgdG8gdGhlICJ0YWlsIiBub3cKKyAgICAgICAg
cG9pbnRzIHRvIG5vbi10YWlsIGl0ZW1zLiBUaGlzIG1ha2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiBhZGRpbmcgdGhpbmdzCisgICAgICAgIHRvIHRoZSBNYXAvU2V0IHdoaWxlIGl0ZXJhdGluZyBl
YXN5LgorCisgICAgICAgIEkgYWxzbyBtYWRlIE1hcC5wcm90b3R5cGUuZ2V0LCBNYXAucHJvdG90
eXBlLmhhcywgYW5kIFNldC5wcm90b3R5cGUuaGFzCisgICAgICAgIGludG8gaW50cmluc2ljcyBp
biB0aGUgREZHLiBUaGUgSVIgY2FuIG5vdyByZWFzb24gYWJvdXQgaGFzaCBtYXAKKyAgICAgICAg
b3BlcmF0aW9ucyBhbmQgY2FuIGV2ZW4gZG8gQ1NFIG92ZXIgV2FuZydzIGhhc2ggZnVuY3Rpb24s
IGhhc2ggbWFwCisgICAgICAgIGJ1Y2tldCBsb29rdXBzLCBoYXNoIG1hcCBidWNrZXQgbG9hZHMs
IGFuZCB0ZXN0aW5nIGlmIGEga2V5IGlzIGluCisgICAgICAgIHRoZSBoYXNoIHRhYmxlLiBUaGlz
IG1ha2VzIGNvZGUgcGF0dGVybnMgZm9yIE1hcCBsaWtlIHNvLCBzdXBlciBmYXN0CisgICAgICAg
IGluIHRoZSBGVEwsIHNpbmNlIHdlIHdpbGwgb25seSBiZSBkb2luZyBhIHNpbmdsZSBoYXNoIGFu
ZCBoYXNoIGJ1Y2tldCBsb29rdXA6CisKKyAgICAgICAgYGBgCisgICAgICAgIGZ1bmN0aW9uIGdl
dEtleUlmUHJlc2VudChtYXAsIGtleSkgeworICAgICAgICAgICAgaWYgKG1hcC5oYXMoa2V5KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gbWFwLmdldChrZXkpOworICAgICAgICB9CisgICAgICAg
IGBgYAorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgcm91Z2hseSBhbiA4JSBzcGVlZHVwIG9uIEVT
NlNhbXBsZUJlbmNoLgorCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBK
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckFSTTY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNNjQ6Om5vdDY0KToKKyAgICAgICAgKiBieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHA6Cisg
ICAgICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbUNsYXNzSW5mbyk6CisgICAgICAgICogYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5o
OgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2Vz
R0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0Vk
Z2UuaDoKKyAgICAgICAgKEpTQzo6REZHOjpFZGdlOjpzaGlmdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6RWRnZTo6bWFrZVdvcmQpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdIZWFwTG9jYXRpb24uY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBkZmcvREZHSGVhcExvY2F0aW9uLmg6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNIZWFwUHJlZGljdGlvbik6CisgICAgICAgICogZGZn
L0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAg
ICAqIGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OlNhZmVUb0V4ZWN1dGVFZGdlOjpvcGVyYXRvcigpKToKKyAgICAgICAg
KEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVNYXBP
YmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTZXRP
YmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1VzZUtp
bmQuY3BwOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZH
VXNlS2luZC5oOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAgICAo
SlNDOjpERkc6OmlzQ2VsbCk6CisgICAgICAgICogZnRsL0ZUTEFic3RyYWN0SGVhcFJlcG9zaXRv
cnkuaDoKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTWFwSGFzaCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVHZXRNYXBCdWNrZXQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlTG9hZEZyb21KU01hcEJ1
Y2tldCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OmNvbXBpbGVJc05v
bkVtcHR5TWFwQnVja2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6
bG93TWFwT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93
U2V0T2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93TWFw
QnVja2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3BlY3VsYXRl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3BlY3VsYXRlTWFwT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c3BlY3VsYXRlU2V0
T2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6c2V0TWFwQnVj
a2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93UmVnRXhwT2Jq
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93
U3RvcmFnZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6
OnNwZWN1bGF0ZVJlZ0V4cE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6OnNldFN0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9Bc3Nl
bWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6OndhbmdzSW50
NjRIYXNoKToKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6
OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlRGVzdHJ1Y3RpYmxlT2JqZWN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAgICAgICAqIHBhcnNlci9Nb2R1
bGVBbmFseXplci5jcHA6CisgICAgICAgIChKU0M6Ok1vZHVsZUFuYWx5emVyOjpNb2R1bGVBbmFs
eXplcik6CisgICAgICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpT
Qzo6SGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0Pjo6Y29weUJhY2tpbmdTdG9yZSk6CisgICAg
ICAgICogcnVudGltZS9IYXNoTWFwSW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SGFzaE1h
cEJ1Y2tldDo6c2VsZWN0U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6
Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6Y3JlYXRlKToK
KyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6SGFzaE1hcEJ1Y2tldCk6CisgICAgICAgIChK
U0M6Okhhc2hNYXBCdWNrZXQ6OnNldE5leHQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0
OjpzZXRQcmV2KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6c2V0S2V5KToKKyAgICAg
ICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6c2V0VmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFw
QnVja2V0OjprZXkpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVja2V0Ojp2YWx1ZSk6CisgICAg
ICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6Om5leHQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVj
a2V0OjpwcmV2KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEJ1Y2tldDo6ZGVsZXRlZCk6CisgICAg
ICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6OnNldERlbGV0ZWQpOgorICAgICAgICAoSlNDOjpIYXNo
TWFwQnVja2V0OjpvZmZzZXRPZktleSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWNrZXQ6Om9m
ZnNldE9mVmFsdWUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwQnVmZmVyOjphbGxvY2F0aW9uU2l6
ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBCdWZmZXI6OmJ1ZmZlcik6CisgICAgICAgIChKU0M6
Okhhc2hNYXBCdWZmZXI6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OmFyZUtleXNFcXVhbCk6Cisg
ICAgICAgIChKU0M6Om5vcm1hbGl6ZU1hcEtleSk6CisgICAgICAgIChKU0M6OmpzTWFwSGFzaCk6
CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpzZWxlY3RTdHJ1Y3R1cmUpOgorICAgICAgICAo
SlNDOjpIYXNoTWFwSW1wbDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SGFzaE1h
cEltcGw6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpIYXNoTWFwSW1wbCk6
CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpidWZmZXIpOgorICAgICAgICAoSlNDOjpIYXNo
TWFwSW1wbDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6ZW1w
dHlWYWx1ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjppc0VtcHR5KToKKyAgICAgICAg
KEpTQzo6SGFzaE1hcEltcGw6OmRlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJ
bXBsOjppc0RlbGV0ZWQpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6ZmluZEJ1Y2tldCk6
CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpnZXQpOgorICAgICAgICAoSlNDOjpIYXNoTWFw
SW1wbDo6aGFzKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmFkZCk6CisgICAgICAgIChK
U0M6Okhhc2hNYXBJbXBsOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6c2l6
ZSk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpjbGVhcik6CisgICAgICAgIChKU0M6Okhh
c2hNYXBJbXBsOjpidWZmZXJTaXplSW5CeXRlcyk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBs
OjpvZmZzZXRPZkJ1ZmZlcik6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjpvZmZzZXRPZkNh
cGFjaXR5KToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OmhlYWQpOgorICAgICAgICAoSlND
OjpIYXNoTWFwSW1wbDo6dGFpbCk6CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjphcHByb3hp
bWF0ZVNpemUpOgorICAgICAgICAoSlNDOjpIYXNoTWFwSW1wbDo6ZmluZEJ1Y2tldEFscmVhZHlI
YXNoZWRBbmROb3JtYWxpemVkKToKKyAgICAgICAgKEpTQzo6SGFzaE1hcEltcGw6OnJlaGFzaCk6
CisgICAgICAgIChKU0M6Okhhc2hNYXBJbXBsOjptYWtlQW5kU2V0TmV3QnVmZmVyKToKKyAgICAg
ICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6
c2FtZVZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmluaXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNNYXAu
Y3BwOgorICAgICAgICAoSlNDOjpKU01hcDo6ZGVzdHJveSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkpTTWFwOjplc3RpbWF0ZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6
OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6Y29weUJhY2tp
bmdTdG9yZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFwOjpoYXMpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU01hcDo6c2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTTWFw
OjpnZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6c2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXA6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6
OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU01hcC5oOgorICAgICAgICAo
SlNDOjpKU01hcDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkpTTWFwOjpnZXQpOgorICAgICAgICAoSlNDOjpKU01hcDo6c2V0
KToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkpTTWFwKToKKyAgICAgICAgKEpTQzo6SlNNYXA6OkVu
dHJ5OjprZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnZhbHVlKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5Ojp2aXNpdENoaWxkcmVuKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpzZXRLZXkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpKU01hcDo6RW50cnk6OnNldFZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6SlNNYXA6OkVudHJ5OjpjbGVhcik6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9KU01hcEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6Zmlu
aXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6Y2xvbmUpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNNYXBJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjphZHZhbmNl
SXRlcik6CisgICAgICAgIChKU0M6OkpTTWFwSXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoSlND
OjpKU01hcEl0ZXJhdG9yOjpuZXh0S2V5VmFsdWUpOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJh
dG9yOjpKU01hcEl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNNYXBJdGVyYXRvcjo6c2V0SXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjpmaW5pc2gpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpKU01hcEl0ZXJhdG9yOjppdGVyYXRvckRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwOgorICAgICAgICAoSlNDOjpKU01vZHVs
ZUxvYWRlcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNNb2R1bGVMb2Fk
ZXIuaDoKKyAgICAgICAgKEpTQzo6SlNNb2R1bGVMb2FkZXI6OmNyZWF0ZSk6CisgICAgICAgICog
cnVudGltZS9KU01vZHVsZVJlY29yZC5jcHA6CisgICAgICAgIChKU0M6OkpTTW9kdWxlUmVjb3Jk
OjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU01vZHVsZVJlY29yZC5oOgor
ICAgICAgICAoSlNDOjpKU01vZHVsZVJlY29yZDo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZXQ6OmRlc3Ryb3kpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKU1NldDo6ZXN0aW1hdGVkU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkpTU2V0Ojp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNv
cHlCYWNraW5nU3RvcmUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6aGFzKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpKU1NldDo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OmNsZWFyKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6SlNTZXQ6OnJlbW92ZSk6IERlbGV0ZWQuCisgICAgICAgICog
cnVudGltZS9KU1NldC5oOgorICAgICAgICAoSlNDOjpKU1NldDo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6SlNTZXQ6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OkpTU2V0OjphZGQp
OgorICAgICAgICAoSlNDOjpKU1NldDo6SlNTZXQpOgorICAgICAgICAoSlNDOjpKU1NldDo6RW50
cnk6OmtleSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6dmFsdWUpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnZpc2l0Q2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpKU1NldDo6RW50cnk6OnNldEtleSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6c2V0S2V5V2l0aG91dFdyaXRlQmFycmllcik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTU2V0OjpFbnRyeTo6c2V0VmFsdWUpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpKU1NldDo6RW50cnk6OmNsZWFyKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL0pTU2V0SXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpmaW5p
c2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJhdG9yOjpjbG9uZSk6CisgICAgICAgICogcnVudGlt
ZS9KU1NldEl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmFkdmFuY2VJ
dGVyKToKKyAgICAgICAgKEpTQzo6SlNTZXRJdGVyYXRvcjo6bmV4dCk6CisgICAgICAgIChKU0M6
OkpTU2V0SXRlcmF0b3I6OkpTU2V0SXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpKU1NldEl0ZXJh
dG9yOjpzZXRJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6OmZpbmlzaCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTU2V0SXRlcmF0b3I6Oml0ZXJhdG9yRGF0YSk6IERl
bGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL01h
cEJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFwQmFzZTxIYXNoTWFwQnVja2V0VHlw
ZT46OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpNYXBCYXNlPEhhc2hNYXBCdWNrZXRU
eXBlPjo6ZXN0aW1hdGVkU2l6ZSk6CisgICAgICAgICogcnVudGltZS9NYXBCYXNlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpNYXBCYXNlOjpzaXplKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6
aGFzKToKKyAgICAgICAgKEpTQzo6TWFwQmFzZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpNYXBC
YXNlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpNYXBCYXNlOjpmaW5kQnVja2V0KToKKyAgICAg
ICAgKEpTQzo6TWFwQmFzZTo6b2Zmc2V0T2ZIYXNoTWFwSW1wbCk6CisgICAgICAgIChKU0M6Ok1h
cEJhc2U6OmltcGwpOgorICAgICAgICAoSlNDOjpNYXBCYXNlOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChKU0M6Ok1hcEJhc2U6Ok1hcEJhc2UpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwQ29u
c3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RNYXApOgorICAgICAgICAqIHJ1
bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRv
clByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAgKiBydW50aW1lL01hcFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6Ok1hcFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpnZXRNYXApOgorICAgICAgICAoSlNDOjpwcml2YXRlRnVuY0lzTWFwKToKKyAgICAgICAg
KEpTQzo6cHJpdmF0ZUZ1bmNNYXBJdGVyYXRvck5leHQpOgorICAgICAgICAqIHJ1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6c2FtZVZhbHVlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oOgorICAgICAgICAqIHJ1bnRp
bWUvU2V0Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RTZXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpT
ZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAgKiBydW50aW1lL1NldFByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OlNldFByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpnZXRTZXQpOgorICAgICAgICAoSlNDOjpwcml2YXRlRnVuY1NldEl0ZXJh
dG9yTmV4dCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OlZNOjpW
TSk6CisgICAgICAgICogcnVudGltZS9WTS5oOgorCiAyMDE2LTA5LTA2ICBCZW5qYW1pbiBQb3Vs
YWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIE1ha2UgQXJpdGhDbHoz
MiB3b3JrIHdpdGggQ2VsbCBhcmd1bWVudHMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VM
aXN0cy50eHQJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjcyLDYgKzY3Miw3IEBAIHNldChKYXZhU2Ny
aXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9HZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5j
cHAKICAgICBydW50aW1lL0dlbmVyYXRvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0dldHRl
clNldHRlci5jcHAKKyAgICBydW50aW1lL0hhc2hNYXBJbXBsLmNwcAogICAgIHJ1bnRpbWUvSWRl
bnRpZmllci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKICAgICBydW50aW1lL0lu
ZmVycmVkVHlwZS5jcHAKQEAgLTc1Nyw2ICs3NTgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09V
UkNFUwogICAgIHJ1bnRpbWUvTGF6eUNsYXNzU3RydWN0dXJlLmNwcAogICAgIHJ1bnRpbWUvTGl0
ZXJhbFBhcnNlci5jcHAKICAgICBydW50aW1lL0xvb2t1cC5jcHAKKyAgICBydW50aW1lL01hcEJh
c2UuY3BwCiAgICAgcnVudGltZS9NYXBDb25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL01hcEl0
ZXJhdG9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvTWFwUHJvdG90eXBlLmNwcApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzE4LDEwICsxMzE4LDE0IEBACiAJCTc5MjMzQzJCMUQzNDcxNTcw
MEM1QTgzNCAvKiBKSVRNYXRoSUMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5MjMzQzI5MUQzNDcxNTcwMEM1QTgzNCAvKiBKSVRNYXRoSUMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OTJDQjM0OTFD
NEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzkyQ0IzNDcxQzRFRUQ1QzAwRDEzQUYzIC8q
IFBDVG9Db2RlT3JpZ2luTWFwLmNwcCAqLzsgfTsKIAkJNzkyQ0IzNEExQzRFRUQ1QzAwRDEzQUYz
IC8qIFBDVG9Db2RlT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5N
YXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3
OTVCMTk5NzFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5NTFENzhCRTM1MDAyNjJGQTAgLyog
TWFwQmFzZS5jcHAgKi87IH07CisJCTc5NUIxOTk4MUQ3OEJFMzUwMDI2MkZBMCAvKiBNYXBCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTVCMTk5
NjFENzhCRTM1MDAyNjJGQTAgLyogTWFwQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5NjQ2NTZBMUI5NTJGRjAwMDMwNTlFRSAvKiBHZXRQ
dXRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OTY0NjU2ODFCOTUyRkYwMDAzMDU5RUUgLyogR2V0UHV0SW5mby5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBC
QSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEgLyogSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovOyB9OwogCQk3OTdFMDdBQTFCOEZDRkI5MDA4
NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5N0UwN0E4MUI4RkNGQjkwMDg0MDBCQSAvKiBK
U0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTc5OUVGN0M0MUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9P
cmlnaW5NYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDc5OUVGN0MzMUM1NkVEOTYwMDJCMDUzNCAvKiBCM1BDVG9PcmlnaW5NYXAuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk3OUEwOTA3RjFENzY4NDY1
MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBs
LmNwcCAqLzsgfTsKKwkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEwOTA3RTFE
NzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3OUEyMjgzNTFEMzVENzFFMDBEOEUwNjcgLyogQXJp
dGhQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDc5QTIyODMzMUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwICovOyB9Owog
CQk3OUEyMjgzNjFEMzVENzFGMDBEOEUwNjcgLyogQXJpdGhQcm9maWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUEyMjgzNDFEMzVENzFFMDBEOEUw
NjcgLyogQXJpdGhQcm9maWxlLmggKi87IH07CiAJCTc5QUYwQkU0MUQzRUZENEMwMEU5NUZBNSAv
KiBKSVRNYXRoSUNJbmxpbmVSZXN1bHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDc5QUYwQkUzMUQzRUZENEMwMEU5NUZBNSAvKiBKSVRNYXRoSUNJbmxp
bmVSZXN1bHQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMzU2OSwxMCArMzU3MywxNCBAQAogCQk3OTIzM0MyOTFEMzQ3MTU3MDBDNUE4MzQgLyog
SklUTWF0aElDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJVE1hdGhJQy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTJDQjM0NzFDNEVFRDVDMDBEMTNBRjMg
LyogUENUb0NvZGVPcmlnaW5NYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUENUb0NvZGVPcmlnaW5NYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3OTJDQjM0ODFDNEVFRDVDMDBEMTNBRjMgLyogUENUb0NvZGVPcmlnaW5NYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUENUb0NvZGVPcmlnaW5NYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzk1QjE5OTUxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFwQmFzZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAvKiBN
YXBCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hcEJhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdl
dFB1dEluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR2V0UHV0SW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBNzFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OTdFMDdBODFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNH
bG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Nzk5RUY3QzMxQzU2RUQ5NjAwMkIwNTM0IC8qIEIzUENUb09yaWdpbk1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BDVG9PcmlnaW5NYXAuaDsgcGF0aCA9IGIzL0IzUENU
b09yaWdpbk1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3OUEwOTA3RDFENzY4
NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSGFzaE1hcEltcGwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1hcEltcGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzlBMjI4MzMxRDM1RDcxRTAwRDhFMDY3IC8qIEFyaXRoUHJvZmlsZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0aFByb2ZpbGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUEyMjgzNDFEMzVENzFFMDBEOEUwNjcgLyogQXJp
dGhQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXRoUHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUE4OTlGRTFEMzg2MTJFMDBEMThD
NzMgLyogSklUTWF0aElDRm9yd2FyZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSklUTWF0aElDRm9yd2FyZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU4
MjUsNiArNTgzMyw4IEBACiAJCQkJNzk2NDY1NjgxQjk1MkZGMDAwMzA1OUVFIC8qIEdldFB1dElu
Zm8uaCAqLywKIAkJCQlCQzAyRTlCODBFMTg0NTQ1MDAwRjkyOTcgLyogR2V0dGVyU2V0dGVyLmNw
cCAqLywKIAkJCQlCQzMzN0JERTBFMUFGMEI4MDA3NjkxOEEgLyogR2V0dGVyU2V0dGVyLmggKi8s
CisJCQkJNzlBMDkwN0QxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmNwcCAqLywKKwkJ
CQk3OUEwOTA3RTFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcEltcGwuaCAqLywKIAkJCQk5MzNB
MzQ5RDAzOEFFODBGMDA4NjM1Q0UgLyogSWRlbnRpZmllci5jcHAgKi8sCiAJCQkJOTMzQTM0OUEw
MzhBRTdDNjAwODYzNUNFIC8qIElkZW50aWZpZXIuaCAqLywKIAkJCQk4NjA2RERFOTE4REE0NEFC
MDBBMzgzRDAgLyogSWRlbnRpZmllcklubGluZXMuaCAqLywKQEAgLTYwMzUsNiArNjA0NSw4IEBA
CiAJCQkJQTdFMkVBNjkwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuaCAqLywKIAkJ
CQlGNjkyQTg2ODAyNTU1OTdEMDFGRjYwRjcgLyogTG9va3VwLmNwcCAqLywKIAkJCQlGNjkyQTg2
OTAyNTU1OTdEMDFGRjYwRjcgLyogTG9va3VwLmggKi8sCisJCQkJNzk1QjE5OTUxRDc4QkUzNTAw
MjYyRkEwIC8qIE1hcEJhc2UuY3BwICovLAorCQkJCTc5NUIxOTk2MUQ3OEJFMzUwMDI2MkZBMCAv
KiBNYXBCYXNlLmggKi8sCiAJCQkJQTcwMDg3MzcxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0
cnVjdG9yLmNwcCAqLywKIAkJCQlBNzAwODczODE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3Ry
dWN0b3IuaCAqLywKIAkJCQlBNzg1MDdENTE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oICov
LApAQCAtNzMyNiw2ICs3MzM4LDcgQEAKIAkJCQkwRjY0QjI3QTFBNzk1N0IyMDA2RTRFNjYgLyog
Q2FsbEVkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlEOERFMEVEMjIwNUIwMEI4OTYxOSAv
KiBDYWxsRnJhbWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRUM5QkI3MUI3RUIwN0MwMDMwM0FE
MSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzk1QjE5OTgx
RDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDc1NUQ3
MUI4NEZCNEEwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwQjgzQjExNEJDRjcxODAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5MzMyOUUxNENBN0RDNTAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTc0OTMsNiArNzUwNiw3IEBACiAJCQkJMEY5RDMzOTcxN0ZGQzRFNjAw
NzNDMkJDIC8qIERGR0ZsdXNoZWRBdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRjgxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0ZsdXNoRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJE
RDgxNTFBQjNEOEJFMDBCQkI4RTggLyogREZHRm9yQWxsS2lsbHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTc5QTA5MDgwMUQ3Njg0NjUwMDhCODg5QiAvKiBIYXNoTWFwSW1wbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2OUNDODkxOTNBQzYwQTAwNDU3NTlFIC8qIERGR0Zyb3plblZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkVDOURDNjEzMjhERjgyMDAyQjJBRDcgLyogREZHR2VuZXJhdGlv
bkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REM4MTMyOERGODIwMDJCMkFENyAvKiBE
RkdHcmFwaC5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjI1LDYgKzkyMzksNyBAQAogCQkJCTBGMDMz
MkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklUVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyogRXhpdEtpbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk3OUEwOTA3RjFENzY4NDY1MDA4Qjg4OUIgLyogSGFzaE1hcElt
cGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUUxNzA4QjAwNzAwQkI3MjJDIC8qIEZU
TEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzI3NEQx
QzFGNjZBQTAwQ0Y2NTY0IC8qIEdQUkluZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUz
MjcxODdERkRFQzAwODNCNjg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtOTI2OSw2ICs5Mjg0LDcgQEAKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0Mg
LyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNEJG
RjJCMUFENDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlDQzEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Qcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNzk1QjE5OTcxRDc4QkUzNTAwMjYyRkEwIC8qIE1hcEJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJEMkQzOEYxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0
aW9uUmFyZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkFBQ0U2M0MxOENBNUEwMzAwRUQw
MTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQy
RjE1QThEQ0UwMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTTY0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTTY0LmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCSh3b3JraW5nIGNvcHkpCkBA
IC05NDMsNiArOTQzLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9hc3NlbWJsZXIubXZuPDY0Pihk
ZXN0LCBzcmMpOwogICAgIH0KIAorICAgIHZvaWQgbm90NjQoUmVnaXN0ZXJJRCBzcmNEc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tdm48NjQ+KHNyY0RzdCwgc3JjRHN0KTsKKyAgICB9
CisKICAgICAvLyBNZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnM6CiAKICAgICB2b2lkIGxvYWQ2NChJ
bXBsaWNpdEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCShyZXZpc2lv
biAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCwxMSBAQAogI2luY2x1ZGUgIlNwZWN1
bGF0ZWRUeXBlLmgiCiAKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24u
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRl
ICJKU1NldC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cmlu
Z09iamVjdC5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtMzQ2LDYgKzM0OCwxMiBA
QCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21DbGFzc0luZm8oCiAKICAgICBpZiAoY2xh
c3NJbmZvID09IFJlZ0V4cE9iamVjdDo6aW5mbygpKQogICAgICAgICByZXR1cm4gU3BlY1JlZ0V4
cE9iamVjdDsKKworICAgIGlmIChjbGFzc0luZm8gPT0gSlNNYXA6OmluZm8oKSkKKyAgICAgICAg
cmV0dXJuIFNwZWNNYXBPYmplY3Q7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEpTU2V0OjppbmZv
KCkpCisgICAgICAgIHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIAogICAgIGlmIChjbGFzc0lu
Zm8tPmlzU3ViQ2xhc3NPZihKU0Z1bmN0aW9uOjppbmZvKCkpKQogICAgICAgICByZXR1cm4gU3Bl
Y0Z1bmN0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Nw
ZWN1bGF0ZWRUeXBlLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw0MSArMzks
NDMgQEAgY2xhc3MgU3RydWN0dXJlOwogCiB0eXBlZGVmIHVpbnQ2NF90IFNwZWN1bGF0ZWRUeXBl
Owogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25lICAgICAgICAgICAgICAgPSAw
OyAvLyBXZSBkb24ndCBrbm93IGFueXRoaW5nIHlldC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAgID0gMXUgPDwgMDsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgSlNGaW5hbE9iamVjdC4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQXJyYXkg
ICAgICAgICAgICAgID0gMXUgPDwgMTsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNBcnJheS4KLXN0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVuY3Rpb24gICAgICAgICAgID0gMXUgPDwg
MjsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjSW50OEFycmF5ICAgICAgICAgID0gMXUgPDwgMzsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIEludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0ludDE2QXJyYXkgICAgICAgICA9IDF1IDw8IDQ7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBJbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50MzJBcnJheSAgICAgICAgID0gMXUgPDwgNTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2Vz
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAx
dSA8PCA2OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhBcnJheSBvciBvbmUgb2YgaXRzIHN1
YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VpbnQ4Q2xhbXBlZEFy
cmF5ICA9IDF1IDw8IDc7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50OENsYW1wZWRBcnJheSBv
ciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y1VpbnQxNkFycmF5ICAgICAgICA9IDF1IDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50
MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY1VpbnQzMkFycmF5ICAgICAgICA9IDF1IDw8IDk7IC8vIEl0J3MgZGVmaW5pdGVs
eSBhbiBVaW50MzJBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0Zsb2F0MzJBcnJheSAgICAgICA9IDF1IDw8IDEwOyAvLyBJdCdz
IGRlZmluaXRlbHkgYW4gVWludDE2QXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGbG9hdDY0QXJyYXkgICAgICAgPSAxdSA8PCAx
MTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xh
c3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmluYWxPYmplY3QgICAgICAg
ID0gMXVsbCA8PCAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU0ZpbmFsT2JqZWN0Lgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNBcnJheSAgICAgICAgICAgICAgPSAxdWxsIDw8IDE7
IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQXJyYXkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Z1bmN0aW9uICAgICAgICAgICA9IDF1bGwgPDwgMjsgLy8gSXQncyBkZWZpbml0ZWx5
IGEgSlNGdW5jdGlvbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50OEFycmF5
ICAgICAgICAgID0gMXVsbCA8PCAzOyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50OEFycmF5IG9y
IG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVj
SW50MTZBcnJheSAgICAgICAgID0gMXVsbCA8PCA0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50
MTZBcnJheSBvciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0ludDMyQXJyYXkgICAgICAgICA9IDF1bGwgPDwgNTsgLy8gSXQncyBkZWZpbml0
ZWx5IGFuIEludDMyQXJyYXkgb3Igb25lIG9mIGl0cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50OEFycmF5ICAgICAgICAgPSAxdWxsIDw8IDY7IC8vIEl0
J3MgZGVmaW5pdGVseSBhbiBVaW50OEFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0
YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVWludDhDbGFtcGVkQXJyYXkgID0gMXVsbCA8
PCA3OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gVWludDhDbGFtcGVkQXJyYXkgb3Igb25lIG9mIGl0
cyBzdWJjbGFzc2VzLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNVaW50MTZBcnJh
eSAgICAgICAgPSAxdWxsIDw8IDg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBVaW50MTZBcnJheSBv
ciBvbmUgb2YgaXRzIHN1YmNsYXNzZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y1VpbnQzMkFycmF5ICAgICAgICA9IDF1bGwgPDwgOTsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIFVp
bnQzMkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjRmxvYXQzMkFycmF5ICAgICAgID0gMXVsbCA8PCAxMDsgLy8gSXQncyBkZWZp
bml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nlcy4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRmxvYXQ2NEFycmF5ICAgICAgID0gMXVsbCA8PCAxMTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIFVpbnQxNkFycmF5IG9yIG9uZSBvZiBpdHMgc3ViY2xhc3Nl
cy4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVHlwZWRBcnJheVZpZXcgICAgID0g
U3BlY0ludDhBcnJheSB8IFNwZWNJbnQxNkFycmF5IHwgU3BlY0ludDMyQXJyYXkgfCBTcGVjVWlu
dDhBcnJheSB8IFNwZWNVaW50OENsYW1wZWRBcnJheSB8IFNwZWNVaW50MTZBcnJheSB8IFNwZWNV
aW50MzJBcnJheSB8IFNwZWNGbG9hdDMyQXJyYXkgfCBTcGVjRmxvYXQ2NEFycmF5Owotc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdSA8PCAxMjsg
Ly8gSXQncyBkZWZpbml0ZWx5IGEgRGlyZWN0QXJndW1lbnRzIG9iamVjdC4KLXN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjU2NvcGVkQXJndW1lbnRzICAgID0gMXUgPDwgMTM7IC8vIEl0
J3MgZGVmaW5pdGVseSBhIFNjb3BlZEFyZ3VtZW50cyBvYmplY3QuCi1zdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1N0cmluZ09iamVjdCAgICAgICA9IDF1IDw8IDE0OyAvLyBJdCdzIGRl
ZmluaXRlbHkgYSBTdHJpbmdPYmplY3QuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y1JlZ0V4cE9iamVjdCAgICAgICA9IDF1IDw8IDE1OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBSZWdF
eHBPYmplY3QgKGFuZCBub3QgYW55IHN1YmNsYXNzIG9mIFJlZ0V4cE9iamVjdCkuCi1zdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAgICA9IDF1IDw8IDE2OyAv
LyBJdCdzIGRlZmluaXRlbHkgYW4gb2JqZWN0IGJ1dCBub3QgSlNGaW5hbE9iamVjdCwgSlNBcnJh
eSwgb3IgSlNGdW5jdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT2JqZWN0
ICAgICAgICAgICAgID0gU3BlY0ZpbmFsT2JqZWN0IHwgU3BlY0FycmF5IHwgU3BlY0Z1bmN0aW9u
IHwgU3BlY1R5cGVkQXJyYXlWaWV3IHwgU3BlY0RpcmVjdEFyZ3VtZW50cyB8IFNwZWNTY29wZWRB
cmd1bWVudHMgfCBTcGVjU3RyaW5nT2JqZWN0IHwgU3BlY1JlZ0V4cE9iamVjdCB8IFNwZWNPYmpl
Y3RPdGhlcjsgLy8gQml0bWFzayB1c2VkIGZvciB0ZXN0aW5nIGZvciBhbnkga2luZCBvZiBvYmpl
Y3QgcHJlZGljdGlvbi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjU3RyaW5nSWRl
bnQgICAgICAgID0gMXUgPDwgMTc7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQg
aXQncyBhbiBpZGVudGlmaWVyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJp
bmdWYXIgICAgICAgICAgPSAxdSA8PCAxODsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNTdHJpbmcs
IGFuZCBpdCdzIG5vdCBhbiBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNEaXJlY3RBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEyOyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBEaXJlY3RBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNw
ZWNTY29wZWRBcmd1bWVudHMgICAgPSAxdWxsIDw8IDEzOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBT
Y29wZWRBcmd1bWVudHMgb2JqZWN0Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNT
dHJpbmdPYmplY3QgICAgICAgPSAxdWxsIDw8IDE0OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBTdHJp
bmdPYmplY3QuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1JlZ0V4cE9iamVjdCAg
ICAgICA9IDF1bGwgPDwgMTU7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFJlZ0V4cE9iamVjdCAoYW5k
IG5vdCBhbnkgc3ViY2xhc3Mgb2YgUmVnRXhwT2JqZWN0KS4KK3N0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjTWFwT2JqZWN0ICAgICAgICAgID0gMXVsbCA8PCAxNjsgLy8gSXQncyBkZWZp
bml0ZWx5IE1hcCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBGSVhNRSkuCitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1NldE9iamVjdCAgICAgICAgICA9IDF1bGwgPDwgMTc7
IC8vIEl0J3MgZGVmaW5pdGVseSBzIFNldCBvYmplY3QgKGNhbiBpdCBiZSBhIHN1YmNsYXNzPyBG
SVhNRSkuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY09iamVjdE90aGVyICAgICAg
ICA9IDF1bGwgPDwgMTg7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBvYmplY3QgYnV0IG5vdCBKU0Zp
bmFsT2JqZWN0LCBKU0FycmF5LCBvciBKU0Z1bmN0aW9uLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNPYmplY3QgICAgICAgICAgICAgPSBTcGVjRmluYWxPYmplY3QgfCBTcGVjQXJy
YXkgfCBTcGVjRnVuY3Rpb24gfCBTcGVjVHlwZWRBcnJheVZpZXcgfCBTcGVjRGlyZWN0QXJndW1l
bnRzIHwgU3BlY1Njb3BlZEFyZ3VtZW50cyB8IFNwZWNTdHJpbmdPYmplY3QgfCBTcGVjUmVnRXhw
T2JqZWN0IHwgU3BlY01hcE9iamVjdCB8IFNwZWNTZXRPYmplY3QgfCBTcGVjT2JqZWN0T3RoZXI7
IC8vIEJpdG1hc2sgdXNlZCBmb3IgdGVzdGluZyBmb3IgYW55IGtpbmQgb2Ygb2JqZWN0IHByZWRp
Y3Rpb24uCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N0cmluZ0lkZW50ICAgICAg
ICA9IDF1bGwgPDwgMTk7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLCBhbmQgaXQncyBh
biBpZGVudGlmaWVyLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNTdHJpbmdWYXIg
ICAgICAgICAgPSAxdWxsIDw8IDIwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBKU1N0cmluZywgYW5k
IGl0J3Mgbm90IGFuIGlkZW50aWZpZXIuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y1N0cmluZyAgICAgICAgICAgICA9IFNwZWNTdHJpbmdJZGVudCB8IFNwZWNTdHJpbmdWYXI7IC8v
IEl0J3MgZGVmaW5pdGVseSBhIEpTU3RyaW5nLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBl
IFNwZWNTeW1ib2wgICAgICAgICAgICAgPSAxdSA8PCAxOTsgLy8gSXQncyBkZWZpbml0ZWx5IGEg
U3ltYm9sLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNDZWxsT3RoZXIgICAgICAg
ICAgPSAxdSA8PCAyMDsgLy8gSXQncyBkZWZpbml0ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJj
bGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVseSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJv
bC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBhcnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUt
dG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CitzdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1N5bWJvbCAgICAgICAgICAgICA9IDF1bGwgPDwg
MjE7IC8vIEl0J3MgZGVmaW5pdGVseSBhIFN5bWJvbC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQ2VsbE90aGVyICAgICAgICAgID0gMXVsbCA8PCAyMjsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgSlNDZWxsIGJ1dCBub3QgYSBzdWJjbGFzcyBvZiBKU09iamVjdCBhbmQgZGVmaW5pdGVs
eSBub3QgYSBKU1N0cmluZyBvciBhIFN5bWJvbC4gRklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBh
cnQgb2YgaGVhcC10b3Agb3IgYnl0ZWNvZGUtdG9wLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMzMDc4CiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Nl
bGwgICAgICAgICAgICAgICA9IFNwZWNPYmplY3QgfCBTcGVjU3RyaW5nIHwgU3BlY1N5bWJvbCB8
IFNwZWNDZWxsT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEpTQ2VsbC4KLXN0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjQm9vbEludDMyICAgICAgICAgID0gMXUgPDwgMjE7IC8vIEl0
J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIDAgb3IgMS4KLXN0YXRpYyBjb25zdCBT
cGVjdWxhdGVkVHlwZSBTcGVjTm9uQm9vbEludDMyICAgICAgID0gMXUgPDwgMjI7IC8vIEl0J3Mg
ZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAxLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sSW50MzIgICAgICAgICAgPSAxdWxsIDw8IDIz
OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50MzIgd2l0aCB2YWx1ZSAwIG9yIDEuCitzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY05vbkJvb2xJbnQzMiAgICAgICA9IDF1bGwgPDwgMjQ7
IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBJbnQzMiB3aXRoIHZhbHVlIG90aGVyIHRoYW4gMCBvciAx
Lgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQzMk9ubHkgICAgICAgICAgPSBT
cGVjQm9vbEludDMyIHwgU3BlY05vbkJvb2xJbnQzMjsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIElu
dDMyLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNJbnQ1Mk9ubHkgICAgICAgICAg
PSAxdSA8PCAyMzsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQg
dG8gdW5ib3ggaXQuIEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KK3N0YXRpYyBj
b25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjSW50NTJPbmx5ICAgICAgICAgID0gMXVsbCA8PCAyNTsg
Ly8gSXQncyBkZWZpbml0ZWx5IGFuIEludDUyIGFuZCB3ZSBpbnRlbmQgaXQgdG8gdW5ib3ggaXQu
IEl0J3MgYWxzbyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQzMi4KIHN0YXRpYyBjb25zdCBTcGVjdWxh
dGVkVHlwZSBTcGVjQW55SW50ICAgICAgICAgICAgID0gU3BlY0ludDMyT25seSB8IFNwZWNJbnQ1
Mk9ubHk7IC8vIEl0J3Mgc29tZXRoaW5nIHRoYXQgd2UgY2FuIGRvIG1hY2hpbmUgaW50IGFyaXRo
bWV0aWMgb24uCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0FueUludEFzRG91Ymxl
ICAgICA9IDF1IDw8IDI0OyAvLyBJdCdzIGRlZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5z
aWRlIGEgZG91YmxlLgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0Rv
dWJsZSAgICAgPSAxdSA8PCAyNTsgLy8gSXQncyBkZWZpbml0ZWx5IG5vdCBhbiBJbnQ1MiBidXQg
aXQncyBhIHJlYWwgbnVtYmVyIGFuZCBpdCdzIGEgZG91YmxlLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNBbnlJbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI2OyAvLyBJdCdzIGRl
ZmluaXRlbHkgYW4gSW50NTIgYW5kIGl0J3MgaW5zaWRlIGEgZG91YmxlLgorc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNOb25JbnRBc0RvdWJsZSAgICAgPSAxdWxsIDw8IDI3OyAvLyBJ
dCdzIGRlZmluaXRlbHkgbm90IGFuIEludDUyIGJ1dCBpdCdzIGEgcmVhbCBudW1iZXIgYW5kIGl0
J3MgYSBkb3VibGUuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZVJlYWwg
ICAgICAgICA9IFNwZWNOb25JbnRBc0RvdWJsZSB8IFNwZWNBbnlJbnRBc0RvdWJsZTsgLy8gSXQn
cyBkZWZpbml0ZWx5IGEgbm9uLU5hTiBkb3VibGUuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0RvdWJsZVB1cmVOYU4gICAgICA9IDF1IDw8IDI2OyAvLyBJdCdzIGRlZmluaXRlbHkg
YSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUpLgotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAxdSA8PCAyNzsgLy8gSXQncyBkZWZp
bml0ZWx5IGEgTmFOIHRoYXQgaXMgdW5zYWZlIHRvIHRhZyAoaS5lLiBpbXB1cmUpLgorc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVQdXJlTmFOICAgICAgPSAxdWxsIDw8IDI4
OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyBzYWUgdG8gdGFnIChpLmUuIHB1cmUp
Lgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNEb3VibGVJbXB1cmVOYU4gICAgPSAx
dWxsIDw8IDI5OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBOYU4gdGhhdCBpcyB1bnNhZmUgdG8gdGFn
IChpLmUuIGltcHVyZSkuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0RvdWJsZU5h
TiAgICAgICAgICA9IFNwZWNEb3VibGVQdXJlTmFOIHwgU3BlY0RvdWJsZUltcHVyZU5hTjsgLy8g
SXQncyBkZWZpbml0ZWx5IHNvbWUga2luZCBvZiBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0J5dGVjb2RlRG91YmxlICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJs
ZVB1cmVOYU47IC8vIEl0J3MgZWl0aGVyIGEgbm9uLU5hTiBvciBhIE5hTiBkb3VibGUsIGJ1dCBp
dCdzIGRlZmluaXRlbHkgbm90IGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5
cGUgU3BlY0Z1bGxEb3VibGUgICAgICAgICA9IFNwZWNEb3VibGVSZWFsIHwgU3BlY0RvdWJsZU5h
TjsgLy8gSXQncyBlaXRoZXIgYSBub24tTmFOIG9yIGEgTmFOIGRvdWJsZS4KQEAgLTgxLDEyICs4
MywxMiBAQCBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlCiBzdGF0aWMg
Y29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IFNwZWNBbnlJbnQg
fCBTcGVjRG91YmxlUmVhbDsgLy8gSXQncyBlaXRoZXIgYW4gSW50MzIgb3IgYSBEb3VibGVSZWFs
LCBvciBhIEludDUyLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51
bWJlciAgICAgPSBTcGVjSW50MzJPbmx5IHwgU3BlY0J5dGVjb2RlRG91YmxlOyAvLyBJdCdzIGVp
dGhlciBhbiBJbnQzMiBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGlt
cHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAg
ICAgICA9IFNwZWNBbnlJbnQgfCBTcGVjRnVsbERvdWJsZTsgLy8gSXQncyBlaXRoZXIgYW4gSW50
MzIsIEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVyZSBOYU4u
Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAgICA9IDF1
IDw8IDI4OyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAxdSA8PCAyOTsgLy8gSXQncyBkZWZp
bml0ZWx5IGVpdGhlciBOdWxsIG9yIFVuZGVmaW5lZC4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQm9vbGVhbiAgICAgICAgICAgID0gMXVsbCA8PCAzMDsgLy8gSXQncyBkZWZpbml0
ZWx5IGEgQm9vbGVhbi4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjT3RoZXIgICAg
ICAgICAgICAgID0gMXVsbCA8PCAzMTsgLy8gSXQncyBkZWZpbml0ZWx5IGVpdGhlciBOdWxsIG9y
IFVuZGVmaW5lZC4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTWlzYyAgICAgICAg
ICAgICAgID0gU3BlY0Jvb2xlYW4gfCBTcGVjT3RoZXI7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRo
ZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9IFNwZWNDZWxsIHwgU3BlY0J5dGVjb2RlTnVt
YmVyIHwgU3BlY01pc2M7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9y
IFNwZWNJbnQ1Mk9ubHkgYW5kIFNwZWNEb3VibGVJbXB1cmVOYU4uCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY1ByaW1pdGl2ZSAgICAgICAgICA9IFNwZWNTdHJpbmcgfCBTcGVjU3lt
Ym9sIHwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY01pc2M7IC8vIEl0J3MgYW55IG5vbi1PYmpl
Y3QgSlNWYWx1ZS4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAg
ICAgICAgID0gMXUgPDwgMzA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJr
ZXIuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9
IDF1bGwgPDwgMzI7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCiBz
dGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IFNwZWNI
ZWFwVG9wIHwgU3BlY0VtcHR5OyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0
IGZvciBTcGVjSW50NTJPbmx5IGFuZCBTcGVjRG91YmxlSW1wdXJlTmFOLiBDb3JyZXNwb25kcyB0
byB3aGF0IGNvdWxkIGJlIGZvdW5kIGluIGEgYnl0ZWNvZGUgbG9jYWwuCiBzdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY0Z1bGxUb3AgICAgICAgICAgICA9IFNwZWNCeXRlY29kZVRvcCB8
IFNwZWNGdWxsTnVtYmVyOyAvLyBJdCBjYW4gYmUgYW55dGhpbmcgdGhhdCBieXRlY29kZSBjb3Vs
ZCBzZWUgcGx1cyBleG90aWMgZW5jb2RpbmdzIG9mIG51bWJlcnMuCiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtOTc3LDYg
Kzk3NywyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZm9yTm9kZShu
b2RlKS5zZXRUeXBlKFNwZWNJbnQzMk9ubHkpOworICAgICAgICBicmVhazsKKworICAgIGNhc2Ug
TG9hZEZyb21KU01hcEJ1Y2tldDoKKyAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgp
OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgU3BlY0NlbGxPdGhlcik7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBJc05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0Jvb2xlYW4pOworICAgICAgICBicmVhazsKKwogICAgIGNhc2UgSXNFbXB0
eToKICAgICBjYXNlIElzSlNBcnJheToKICAgICBjYXNlIElzVW5kZWZpbmVkOgpAQCAtMjg4Myw3
ICsyODk5LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlKHVuc2lnbmVkIGlu
ZGV4SW5CbG9jaykKIHsKICAgICBOb2RlKiBub2RlID0gbV9zdGF0ZS5ibG9jaygpLT5hdChpbmRl
eEluQmxvY2spOwotICAgIAorCiAgICAgc3RhcnRFeGVjdXRpbmcoKTsKICAgICBleGVjdXRlRWRn
ZXMobm9kZSk7CiAgICAgcmV0dXJuIGV4ZWN1dGVFZmZlY3RzKGluZGV4SW5CbG9jaywgbm9kZSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1MzgsNyArMjUzOCwzNyBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWNDYWxsCiAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBnZXQob3BlcmFuZCkpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgICAgIAorCisgICAgY2FzZSBKU01hcEdldEludHJpbnNp
YzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpbnNlcnRDaGVja3MoKTsKKyAgICAgICAg
Tm9kZSogbWFwID0gZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KDAsIHJlZ2lzdGVyT2Zm
c2V0KSk7CisgICAgICAgIE5vZGUqIGtleSA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dCgxLCByZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBoYXNoID0gYWRkVG9HcmFwaChN
YXBIYXNoLCBrZXkpOworICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1
Y2tldCwgRWRnZShtYXAsIE1hcE9iamVjdFVzZSksIEVkZ2Uoa2V5KSwgRWRnZShoYXNoKSk7Cisg
ICAgICAgIE5vZGUqIHJlc3VsdCA9IGFkZFRvR3JhcGgoTG9hZEZyb21KU01hcEJ1Y2tldCwgT3BJ
bmZvKCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYnVja2V0KTsKKyAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgY2FzZSBKU1NldEhhc0ludHJpbnNpYzoKKyAgICBjYXNlIEpTTWFwSGFzSW50
cmluc2ljOiB7CisgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGluc2VydENoZWNrcygpOworICAg
ICAgICBOb2RlKiBtYXBPclNldCA9IGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgwLCBy
ZWdpc3Rlck9mZnNldCkpOworICAgICAgICBOb2RlKiBrZXkgPSBnZXQodmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpKTsKKyAgICAgICAgTm9kZSogaGFzaCA9IGFk
ZFRvR3JhcGgoTWFwSGFzaCwga2V5KTsKKyAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gaW50cmlu
c2ljID09IEpTU2V0SGFzSW50cmluc2ljID8gU2V0T2JqZWN0VXNlIDogTWFwT2JqZWN0VXNlOwor
ICAgICAgICBOb2RlKiBidWNrZXQgPSBhZGRUb0dyYXBoKEdldE1hcEJ1Y2tldCwgT3BJbmZvKDAp
LCBFZGdlKG1hcE9yU2V0LCB1c2VLaW5kKSwgRWRnZShrZXkpLCBFZGdlKGhhc2gpKTsKKyAgICAg
ICAgTm9kZSogcmVzdWx0ID0gYWRkVG9HcmFwaChJc05vbkVtcHR5TWFwQnVja2V0LCBidWNrZXQp
OworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCByZXN1bHQpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUxLDYgKzEyNTEsMjcgQEAgdm9p
ZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTG9nU2hhZG93
Q2hpY2tlblRhaWw6CiAgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CiAgICAgICAgIHJldHVybjsK
KworICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgZGVmKFB1cmVWYWx1ZShub2RlKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICByZWFkKE1pc2NG
aWVsZHMpOworICAgICAgICBFZGdlJiBtYXBFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CisgICAgICAg
IEVkZ2UmIGtleUVkZ2UgPSBub2RlLT5jaGlsZDIoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlv
bihNYXBCdWNrZXRMb2MsIE1pc2NGaWVsZHMsIG1hcEVkZ2UsIGtleUVkZ2UpLCBMYXp5Tm9kZShu
b2RlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVj
a2V0OiB7CisgICAgICAgIHJlYWQoTWlzY0ZpZWxkcyk7CisgICAgICAgIEVkZ2UmIGJ1Y2tldEVk
Z2UgPSBub2RlLT5jaGlsZDEoKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihKU01hcEdldExv
YywgTWlzY0ZpZWxkcywgYnVja2V0RWRnZSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CisgICAgICAgIHJlYWQo
TWlzY0ZpZWxkcyk7CisgICAgICAgIGRlZihIZWFwTG9jYXRpb24oTWFwSGFzTG9jLCBNaXNjRmll
bGRzLCBub2RlLT5jaGlsZDEoKSksIExhenlOb2RlKG5vZGUpKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5j
cHAJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSwxMCBAQCBib29sIGRvZXNHQyhH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CiAgICAgY2Fz
ZSBDaGVja1dhdGNoZG9nVGltZXI6CiAgICAgY2FzZSBTdHJpbmdGcm9tQ2hhckNvZGU6CisgICAg
Y2FzZSBNYXBIYXNoOgorICAgIGNhc2UgR2V0TWFwQnVja2V0OgorICAgIGNhc2UgTG9hZEZyb21K
U01hcEJ1Y2tldDoKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6CiAgICAgY2FzZSBVbnJl
YWNoYWJsZToKICAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgogICAgIGNhc2UgQ2hlY2tU
aWVyVXBJbkxvb3A6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0VkZ2UuaAkocmV2aXNp
b24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdFZGdlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE4OSw3ICsxODksNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBB
ZGphY2VuY3lMaXN0OwogICAgIAogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgc3RhdGljIHVpbnQz
Ml90IHNoaWZ0KCkgeyByZXR1cm4gNzsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgdWludDMyX3Qg
c2hpZnQoKSB7IHJldHVybiA4OyB9CiAgICAgCiAgICAgc3RhdGljIHVpbnRwdHJfdCBtYWtlV29y
ZChOb2RlKiBub2RlLCBVc2VLaW5kIHVzZUtpbmQsIFByb29mU3RhdHVzIHByb29mU3RhdHVzLCBL
aWxsU3RhdHVzIGtpbGxTdGF0dXMpCiAgICAgewpAQCAtMTk3LDggKzE5NywyMSBAQCBwcml2YXRl
OgogICAgICAgICB1aW50cHRyX3Qgc2hpZnRlZFZhbHVlID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZSkgPDwgc2hpZnQoKTsKICAgICAgICAgQVNTRVJUKChzaGlmdGVkVmFsdWUgPj4gc2hp
ZnQoKSkgPT0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpOwogICAgICAgICBBU1NFUlQo
dXNlS2luZCA+PSAwICYmIHVzZUtpbmQgPCBMYXN0VXNlS2luZCk7Ci0gICAgICAgIEFTU0VSVCgo
c3RhdGljX2Nhc3Q8dWludHB0cl90PihMYXN0VXNlS2luZCkgPDwgMikgPD0gKHN0YXRpY19jYXN0
PHVpbnRwdHJfdD4oMikgPDwgc2hpZnQoKSkpOwotICAgICAgICByZXR1cm4gc2hpZnRlZFZhbHVl
IHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4odXNlS2luZCkgPDwgMikgfCAoREZHOjpkb2VzS2ls
bChraWxsU3RhdHVzKSA8PCAxKSB8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oREZHOjppc1Byb3Zl
ZChwcm9vZlN0YXR1cykpOworICAgICAgICBzdGF0aWNfYXNzZXJ0KChzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KExhc3RVc2VLaW5kKSA8PCAyKSA8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpIDw8
IHNoaWZ0KCkpLCAiV2UgcmVseSBvbiB0aGlzIGJlaW5nIHRydWUgdG8gbm90IGNsb2JiZXIgdGhl
IG5vZGUgcG9pbnRlci4iKTsKKyAgICAgICAgdWludHB0cl90IHJlc3VsdCA9IHNoaWZ0ZWRWYWx1
ZSB8IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KHVzZUtpbmQpIDw8IDIpIHwgKERGRzo6ZG9lc0tp
bGwoa2lsbFN0YXR1cykgPDwgMSkgfCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KERGRzo6aXNQcm92
ZWQocHJvb2ZTdGF0dXMpKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAg
ICAgICAgIHVuaW9uIFUgeworICAgICAgICAgICAgICAgIFUoKSB7IHdvcmQgPSAwOyB9CisgICAg
ICAgICAgICAgICAgdWludHB0cl90IHdvcmQ7CisgICAgICAgICAgICAgICAgRWRnZSBlZGdlOwor
ICAgICAgICAgICAgfSB1OworICAgICAgICAgICAgdS53b3JkID0gcmVzdWx0OworICAgICAgICAg
ICAgQVNTRVJUKHUuZWRnZS51c2VLaW5kVW5jaGVja2VkKCkgPT0gdXNlS2luZCk7CisgICAgICAg
ICAgICBBU1NFUlQodS5lZGdlLm5vZGUoKSA9PSBub2RlKTsKKyAgICAgICAgICAgIEFTU0VSVCh1
LmVkZ2UucHJvb2ZTdGF0dXNVbmNoZWNrZWQoKSA9PSBwcm9vZlN0YXR1cyk7CisgICAgICAgICAg
ICBBU1NFUlQodS5lZGdlLmtpbGxTdGF0dXNVbmNoZWNrZWQoKSA9PSBraWxsU3RhdHVzKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICNlbHNlCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9u
IDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1NDgsNiArMTU0OCwyOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAg
ICAgICAgICAgICAgIGZpeEVkZ2U8TWFwT2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gU2V0T2JqZWN0VXNl
KQorICAgICAgICAgICAgICAgIGZpeEVkZ2U8U2V0T2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGZpeEVkZ2U8VW50eXBlZFVzZT4obm9kZS0+Y2hpbGQyKCkp
OworICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQzKCkpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAg
ICAgICAgZml4RWRnZTxLbm93bkNlbGxVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIGNhc2UgSXNOb25FbXB0eU1hcEJ1Y2tldDoKKyAgICAgICAgICAg
IGZpeEVkZ2U8S25vd25DZWxsVXNlPihub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIE1hcEhhc2g6CisgICAgICAgICAgICBmaXhFZGdlPFVudHlwZWRV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIGJyZWFrOworCiAjaWYgIUFTU0VSVF9E
SVNBQkxFRAogICAgICAgICAvLyBIYXZlIHRoZXNlIG5vLW9wIGNhc2VzIGhlcmUgdG8gZW5zdXJl
IHRoYXQgbm9ib2R5IGZvcmdldHMgdG8gYWRkIGhhbmRsZXJzIGZvciBuZXcgb3Bjb2Rlcy4KICAg
ICAgICAgY2FzZSBTZXRBcmd1bWVudDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSGVhcExvY2F0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5jcHAJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQz
LDYgKzE0MywxNSBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTG9jCiAg
ICAgY2FzZSBSZWdFeHBPYmplY3RMYXN0SW5kZXhMb2M6CiAgICAgICAgIG91dC5wcmludCgiUmVn
RXhwT2JqZWN0TGFzdEluZGV4TG9jIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hcEJ1
Y2tldExvYzoKKyAgICAgICAgb3V0LnByaW50KCJNYXBCdWNrZXRMb2MiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSlNNYXBHZXRMb2M6CisgICAgICAgIG91dC5wcmludCgiSlNNYXBHZXRM
b2MiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFwSGFzTG9jOgorICAgICAgICBvdXQu
cHJpbnQoIk1hcEhhc0xvYyIpOworICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAogICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0hlYXBMb2NhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSGVhcExvY2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcg
KzU4LDEwIEBAIGVudW0gTG9jYXRpb25LaW5kIHsKICAgICBTdHJ1Y3R1cmVMb2MsCiAgICAgVHlw
ZWRBcnJheUJ5dGVPZmZzZXRMb2MsCiAgICAgU3RhY2tMb2MsCi0gICAgU3RhY2tQYXlsb2FkTG9j
CisgICAgU3RhY2tQYXlsb2FkTG9jLAorICAgIE1hcEJ1Y2tldExvYywKKyAgICBKU01hcEdldExv
YywKKyAgICBNYXBIYXNMb2MKIH07CiAKIGNsYXNzIEhlYXBMb2NhdGlvbiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MjEsNiArMTQy
MSw3IEBAIHB1YmxpYzoKICAgICAgICAgY2FzZSBTdHJpbmdSZXBsYWNlOgogICAgICAgICBjYXNl
IFN0cmluZ1JlcGxhY2VSZWdFeHA6CiAgICAgICAgIGNhc2UgVG9OdW1iZXI6CisgICAgICAgIGNh
c2UgTG9hZEZyb21KU01hcEJ1Y2tldDoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODgsNyAr
Mzg4LDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRQ
cm9wZXJ0eUVudW1lcmF0b3IsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0SlMpIFwKICAg
ICBtYWNybyhHZXRFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWUsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhHZXRFbnVtZXJhdG9yR2VuZXJpY1BuYW1lLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oVG9JbmRleFN0cmluZywg
Tm9kZVJlc3VsdEpTKQorICAgIG1hY3JvKFRvSW5kZXhTdHJpbmcsIE5vZGVSZXN1bHRKUykgXAor
ICAgIC8qIE5vZGVzIGZvciBKU01hcCBhbmQgSlNTZXQgKi8gXAorICAgIG1hY3JvKE1hcEhhc2gs
IE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEdldE1hcEJ1Y2tldCwgTm9kZVJlc3VsdEpT
KSBcCisgICAgbWFjcm8oTG9hZEZyb21KU01hcEJ1Y2tldCwgTm9kZVJlc3VsdEpTKSBcCisgICAg
bWFjcm8oSXNOb25FbXB0eU1hcEJ1Y2tldCwgTm9kZVJlc3VsdEJvb2xlYW4pIFwKIAogLy8gVGhp
cyBlbnVtIGdlbmVyYXRlcyBhIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpZCBmb3IgYWxsIE5v
ZGUgdHlwZXMsCiAvLyBhbmQgaXMgdXNlZCBieSB0aGUgc3Vic2VxdWVudCBlbnVtIHRvIGZpbGwg
b3V0IHRoZSBpZCAoYXMgYWNjZXNzZWQgdmlhIHRoZSBOb2RlSWRNYXNrKS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjA1NTE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlICJKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRl
ICJKU1NldC5oIgogI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiUmVw
YXRjaC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtMTgyMyw2ICsxODI1LDM0
IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXREeW5hbWljVmEKICAgICBzY29wZS0+
bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKHZh
bHVlKSwgc2xvdCk7CiB9CiAKK2ludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25NYXBIYXNo
KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgaW5wdXQpCit7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7
CisKKyAgICByZXR1cm4ganNNYXBIYXNoKGV4ZWMsIHZtLCBub3JtYWxpemVNYXBLZXkoSlNWYWx1
ZTo6ZGVjb2RlKGlucHV0KSkpOworfQorCitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SlNNYXBGaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBtYXAsIEVuY29kZWRKU1Zh
bHVlIGtleSwgaW50MzJfdCBoYXNoKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTTWFwOjpCdWNr
ZXRUeXBlKiogYnVja2V0ID0ganNDYXN0PEpTTWFwKj4obWFwKS0+ZmluZEJ1Y2tldChleGVjLCBu
b3JtYWxpemVNYXBLZXkoSlNWYWx1ZTo6ZGVjb2RlKGtleSkpLCBoYXNoKTsKKyAgICBpZiAoIWJ1
Y2tldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuICpidWNrZXQ7Cit9CisK
K0pTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIG1hcCwgRW5jb2RlZEpTVmFsdWUga2V5LCBpbnQzMl90IGhhc2gpCit7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKCZ2bSwgZXhlYyk7CisgICAgSlNTZXQ6OkJ1Y2tldFR5cGUqKiBidWNrZXQgPSBqc0Nhc3Q8
SlNTZXQqPihtYXApLT5maW5kQnVja2V0KGV4ZWMsIG5vcm1hbGl6ZU1hcEtleShKU1ZhbHVlOjpk
ZWNvZGUoa2V5KSksIGhhc2gpOworICAgIGlmICghYnVja2V0KQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICByZXR1cm4gKmJ1Y2tldDsKK30KKwogZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVS
QVRJT04gdHJpZ2dlclJlb3B0aW1pemF0aW9uTm93KENvZGVCbG9jayogY29kZUJsb2NrLCBPU1JF
eGl0QmFzZSogZXhpdCkKIHsKICAgICAvLyBJdCdzIHNvcnQgb2YgcHJlZmVyYWJsZSB0aGF0IHdl
IGRvbid0IEdDIHdoaWxlIGluIGhlcmUuIEFueXdheXMsIGRvaW5nIHNvIHdvdWxkbid0CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMjA1
NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE0Myw2ICsxNDMsMTAgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25FbnN1cmVBcnJheQogU3RyaW5nSW1wbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25SZXNvbHZl
Um9wZShFeGVjU3RhdGUqLCBKU1N0cmluZyopOwogSlNTdHJpbmcqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uU2luZ2xlQ2hhcmFjdGVyU3RyaW5nKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogCitpbnQz
Ml90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFwSGFzaChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBpbnB1dCk7CitKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSlNNYXBGaW5kQnVj
a2V0KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90KTsKK0pTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25KU1NldEZpbmRCdWNrZXQoRXhlY1N0YXRlKiwgSlND
ZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOworCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3U3RyaW5nT2JqZWN0KEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgU3RydWN0dXJl
Kik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmdPbkNlbGwoRXhlY1N0
YXRlKiwgSlNDZWxsKik7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9TdHJpbmco
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDgsNiArNzA4LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAg
ICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOgor
ICAgICAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CiAgICAgICAgIGNhc2UgVG9OdW1iZXI6
IHsKICAgICAgICAgICAgIHNldFByZWRpY3Rpb24obV9jdXJyZW50Tm9kZS0+Z2V0SGVhcFByZWRp
Y3Rpb24oKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTczOCw2ICs3MzksMTYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBNYXBIYXNo
OgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjSW50MzJPbmx5KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdldE1hcEJ1Y2tldDoKKyAgICAgICAgICAgIHNldFByZWRp
Y3Rpb24oU3BlY0NlbGxPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
c05vbkVtcHR5TWFwQnVja2V0OgorICAgICAgICAgICAgc2V0UHJlZGljdGlvbihTcGVjQm9vbGVh
bik7CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICBjYXNlIEdldFJlc3RMZW5ndGg6IHsK
ICAgICAgICAgICAgIHNldFByZWRpY3Rpb24oU3BlY0ludDMyT25seSk7CiAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGNhc2UgRnVuY3Rpb25Vc2U6CiAgICAgICAgIGNhc2UgRmluYWxPYmplY3RVc2U6CiAg
ICAgICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgorICAgICAgICBjYXNlIE1hcE9iamVjdFVzZToK
KyAgICAgICAgY2FzZSBTZXRPYmplY3RVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0T3JPdGhlclVz
ZToKICAgICAgICAgY2FzZSBTdHJpbmdJZGVudFVzZToKICAgICAgICAgY2FzZSBTdHJpbmdVc2U6
CkBAIC0zNTUsNiArMzU3LDEwIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICBjYXNlIEdldER5bmFtaWNWYXI6CiAgICAgY2FzZSBQdXREeW5hbWljVmFyOgog
ICAgIGNhc2UgUmVzb2x2ZVNjb3BlOgorICAgIGNhc2UgTWFwSGFzaDoKKyAgICBjYXNlIEdldE1h
cEJ1Y2tldDoKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6CisgICAgY2FzZSBJc05vbkVt
cHR5TWFwQnVja2V0OgogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGNhc2UgQm90dG9tVmFs
dWU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
LDYgKzM3LDcgQEAKICNpbmNsdWRlICJERkdTbG93UGF0aEdlbmVyYXRvci5oIgogI2luY2x1ZGUg
IkRpcmVjdEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1ZGUg
Ikhhc2hNYXBJbXBsLmgiCiAjaW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29yZC5oIgogI2luY2x1
ZGUgIkpTTGV4aWNhbEVudmlyb25tZW50LmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVt
ZXJhdG9yLmgiCkBAIC00NzE5LDYgKzQ3MjAsODIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIE1hcEhh
c2g6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgaW5wdXQodGhpcywgbm9kZS0+Y2hpbGQxKCkp
OworCisgICAgICAgIEpTVmFsdWVSZWdzIGlucHV0UmVncyA9IGlucHV0LmpzVmFsdWVSZWdzKCk7
CisKKyAgICAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwgcmVzdWx0R1BSLCBp
bnB1dFJlZ3MpOworICAgICAgICBtX2ppdC5leGNlcHRpb25DaGVjaygpOworICAgICAgICBpbnQz
MlJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBj
YXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBtYXAodGhp
cywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBrZXkodGhpcywgbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgaGFzaCh0aGlzLCBu
b2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKKworICAgICAgICBHUFJSZWcgbWFwR1BSID0gbWFwLmdwcigpOworICAgICAgICBKU1ZhbHVl
UmVncyBrZXlSZWdzID0ga2V5LmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyBoYXNoR1BS
ID0gaGFzaC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
KworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkK
KyAgICAgICAgICAgIHNwZWN1bGF0ZU1hcE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BSKTsK
KyAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVjdFVz
ZSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChub2RlLT5jaGlsZDEoKSwgbWFwR1BS
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKworICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkudXNlS2luZCgpID09IE1hcE9iamVjdFVzZSkKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uSlNNYXBGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5UmVncywgaGFz
aEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
SlNTZXRGaW5kQnVja2V0LCByZXN1bHRHUFIsIG1hcEdQUiwga2V5UmVncywgaGFzaEdQUik7Cisg
ICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBMb2FkRnJvbUpT
TWFwQnVja2V0OiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJ1Y2tldCh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHRQYXlsb2FkKHRoaXMp
OworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOworCisgICAgICAgIEdQUlJl
ZyBidWNrZXRHUFIgPSBidWNrZXQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRQYXlsb2Fk
R1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9
IHJlc3VsdFRhZy5ncHIoKTsKKworICAgICAgICBhdXRvIG5vdEJ1Y2tldCA9IG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGJ1Y2tldEdQUik7CisgICAgICAgIG1faml0
LmxvYWRWYWx1ZShNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFsdWUoKSksIEpTVmFsdWVS
ZWdzKHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUikpOworICAgICAgICBhdXRvIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CisKKyAgICAgICAgbm90QnVja2V0LmxpbmsoJm1faml0KTsKKyAgICAg
ICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
VGFnR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxv
YWRHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVj
a2V0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIG1faml0LmNvbXBhcmVQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRH
UFIsIFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYm9vbGVhblJlc3VsdChy
ZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIEZsdXNo
OgogICAgICAgICBicmVhazsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw5IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
RW52aXJvbm1lbnRSZWNvcmQuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9ubWVudC5oIgor
I2luY2x1ZGUgIkpTTWFwLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgi
CisjaW5jbHVkZSAiSlNTZXQuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNs
dWRlICJTZXR1cFZhcmFyZ3NGcmFtZS5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5o
IgpAQCAtNDYxNSw2ICs0NjE3LDE2OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAorICAgIGNhc2UgTWFwSGFzaDogewor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBpbnB1dCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworCisgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9IGlucHV0LmdwcigpOworICAgICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CisKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHN0cmFp
Z2h0SGFzaDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IGRvbmU7CisgICAgICAg
IGF1dG8gaXNOb3RDZWxsID0gbV9qaXQuYnJhbmNoSWZOb3RDZWxsKGlucHV0R1BSKTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzdHJhaWdodEhh
c2guYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhpbnB1dEdQUiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSks
IFRydXN0ZWRJbW0zMihTdHJpbmdUeXBlKSkpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGlucHV0R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdEdQUikpOworICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNl
dCgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQudXJzaGlmdDY0KE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6c19mbGFnQ291bnQpLCByZXN1bHRHUFIpOworICAg
ICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKwor
ICAgICAgICBpc05vdENlbGwubGluaygmbV9qaXQpOworICAgICAgICBzdHJhaWdodEhhc2guYXBw
ZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGlucHV0R1BSKSk7CisgICAgICAgIHN0cmFpZ2h0
SGFzaC5hcHBlbmQobV9qaXQuYnJhbmNoSWZJbnQzMihKU1ZhbHVlUmVncyhpbnB1dEdQUikpKTsK
KyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgc3RyYWln
aHRIYXNoLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShpbnB1dEdQUiwgcmVzdWx0
R1BSKTsKKyAgICAgICAgbV9qaXQud2FuZ3NJbnQ2NEhhc2gocmVzdWx0R1BSLCB0ZW1wR1BSKTsK
KyAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICBzbG93UGF0aC5s
aW5rKCZtX2ppdCk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7
CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWFwSGFzaCwgcmVzdWx0R1BSLCBKU1Zh
bHVlUmVncyhpbnB1dEdQUikpOworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CisgICAgICAgIGludDMyUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdldE1hcEJ1Y2tldDogeworICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBtYXAodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBrZXkodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICBTcGVjdWxhdGVJ
bnQzMk9wZXJhbmQgaGFzaCh0aGlzLCBub2RlLT5jaGlsZDMoKSk7CisgICAgICAgIEdQUlRlbXBv
cmFyeSBtYXNrKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgaW5kZXgodGhpcyk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSBidWZmZXIodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBidWNr
ZXQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICAgICAg
R1BSUmVnIGhhc2hHUFIgPSBoYXNoLmdwcigpOworICAgICAgICBHUFJSZWcgbWFwR1BSID0gbWFw
LmdwcigpOworICAgICAgICBHUFJSZWcgbWFza0dQUiA9IG1hc2suZ3ByKCk7CisgICAgICAgIEdQ
UlJlZyBpbmRleEdQUiA9IGluZGV4LmdwcigpOworICAgICAgICBHUFJSZWcgYnVmZmVyR1BSID0g
YnVmZmVyLmdwcigpOworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVja2V0LmdwcigpOwor
ICAgICAgICBHUFJSZWcga2V5R1BSID0ga2V5LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KG5vZGUt
PmNoaWxkMSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlIGlmIChub2RlLT5jaGlsZDEoKS51c2VL
aW5kKCkgPT0gU2V0T2JqZWN0VXNlKQorICAgICAgICAgICAgc3BlY3VsYXRlU2V0T2JqZWN0KG5v
ZGUtPmNoaWxkMSgpLCBtYXBHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MobWFwR1BSLCBub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTWFwT2Jq
ZWN0VXNlID8gSlNNYXA6Om9mZnNldE9mSGFzaE1hcEltcGwoKSA6IEpTU2V0OjpvZmZzZXRPZkhh
c2hNYXBJbXBsKCkpLCBidWZmZXJHUFIpOworICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYnVmZmVyR1BSLCBIYXNoTWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQ2FwYWNpdHkoKSksIG1hc2tHUFIpOworICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJ1ZmZlckdQUiwgSGFzaE1h
cEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleT4+OjpvZmZzZXRPZkJ1ZmZl
cigpKSwgYnVmZmVyR1BSKTsKKyAgICAgICAgbV9qaXQuc3ViMzIoVHJ1c3RlZEltbTMyKDEpLCBt
YXNrR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShoYXNoR1BSLCBpbmRleEdQUik7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIGxvb3AgPSBtX2ppdC5sYWJlbCgpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZG9uZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXBMaXN0IHNsb3dQYXRoQ2FzZXM7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBs
b29wQXJvdW5kOworCisgICAgICAgIG1faml0LmFuZDMyKG1hc2tHUFIsIGluZGV4R1BSKTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KGJ1ZmZlckdQUiwg
aW5kZXhHUFIsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0KSwgYnVja2V0R1BSKTsKKyAgICAg
ICAgbV9qaXQubW92ZShidWNrZXRHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIGF1dG8gbm90UHJl
c2VudEluVGFibGUgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAg
ICAgICAgICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmVtcHR5VmFsdWUoKSkpOworICAgICAgICBsb29w
QXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCAKKyAg
ICAgICAgICAgIGJ1Y2tldEdQUiwgVHJ1c3RlZEltbVB0cihIYXNoTWFwSW1wbDxIYXNoTWFwQnVj
a2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmRlbGV0ZWRWYWx1ZSgpKSkpOworCisgICAgICAg
IG1faml0LmxvYWQ2NChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhidWNrZXRHUFIsIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpvZmZzZXRPZktleSgpKSwgYnVja2V0R1BSKTsK
KworICAgICAgICAvLyBQZXJmb3JtIE9iamVjdC5pcygpCisgICAgICAgIGRvbmUuYXBwZW5kKG1f
aml0LmJyYW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgYnVja2V0R1BSLCBrZXlHUFIpKTsg
Ly8gVGhleSdyZSBkZWZpbml0ZWx5IHRoZSBzYW1lIHZhbHVlLCB3ZSBmb3VuZCB0aGUgYnVja2V0
IHdlIHdlcmUgbG9va2luZyBmb3IhCisgICAgICAgIGF1dG8gb25lSXNudENlbGwgPSBtX2ppdC5i
cmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoYnVja2V0R1BSKSk7CisgICAgICAgIC8vIGZpcnN0
IGlzIGEgY2VsbCBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2hJ
Zk5vdENlbGwoSlNWYWx1ZVJlZ3Moa2V5R1BSKSkpOworICAgICAgICAvLyBCb3RoIGFyZSBjZWxs
cyBoZXJlLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5icmFuY2g4KEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJ1Y2tldEdQ
UiwgSlNDZWxsOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdUeXBl
KSkpOworICAgICAgICAvLyBUaGUgZmlyc3QgaXMgYSBzdHJpbmcgaGVyZS4KKyAgICAgICAgc2xv
d1BhdGhDYXNlcy5hcHBlbmQobV9qaXQuYnJhbmNoOChKSVRDb21waWxlcjo6RXF1YWwsCisgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhrZXlHUFIsIEpTQ2VsbDo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nVHlwZSkpKTsKKyAgICAgICAgLy8gVGhlIGZp
cnN0IGlzIGEgc3RyaW5nLCBidXQgdGhlIHNlY29uZCBpcyBub3QsIHdlIGNvbnRpbnVlIHRvIGxv
b3AgYXJvdW5kLgorICAgICAgICBsb29wQXJvdW5kLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisg
ICAgICAgIG9uZUlzbnRDZWxsLmxpbmsoJm1faml0KTsKKyAgICAgICAgLy8gV2UndmUgYWxyZWFk
eSBkb25lIGEgNjQtYml0IGNvbXBhcmUgYXQgdGhpcyBwb2ludCwgc28gaWYgb25lIGlzIG5vdCBh
IG51bWJlciwgdGhleSdyZSBkZWZpbml0ZWx5IG5vdCBlcXVhbC4KKyAgICAgICAgbG9vcEFyb3Vu
ZC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3ROdW1iZXIoYnVja2V0R1BSKSk7CisgICAgICAgIGxv
b3BBcm91bmQuYXBwZW5kKG1faml0LmJyYW5jaElmTm90TnVtYmVyKGtleUdQUikpOworICAgICAg
ICAvLyBCb3RoIGFyZSBkZWZpbml0ZWx5IG51bWJlcnMuIElmIHdlIHNlZSBhIGRvdWJsZSwgd2Ug
Z28gdG8gdGhlIHNsb3cgcGF0aC4KKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBlbmQobV9qaXQu
YnJhbmNoSWZOb3RJbnQzMihidWNrZXRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGhDYXNlcy5hcHBl
bmQobV9qaXQuYnJhbmNoSWZOb3RJbnQzMihrZXlHUFIpKTsKKyAgICAgICAgCisgICAgICAgIGxv
b3BBcm91bmQubGluaygmbV9qaXQpOworICAgICAgICBtX2ppdC5hZGQzMihUcnVzdGVkSW1tMzIo
MSksIGluZGV4R1BSKTsKKyAgICAgICAgbV9qaXQuanVtcCgpLmxpbmtUbyhsb29wLCAmbV9qaXQp
OworCisgICAgICAgIHNsb3dQYXRoQ2FzZXMubGluaygmbV9qaXQpOworICAgICAgICBzaWxlbnRT
cGlsbEFsbFJlZ2lzdGVycyhpbmRleEdQUik7CisgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlKQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25KU01hcEZpbmRCdWNrZXQsIHJlc3VsdEdQUiwgbWFwR1BSLCBrZXlHUFIsIGhhc2hHUFIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkpTU2V0
RmluZEJ1Y2tldCwgcmVzdWx0R1BSLCBtYXBHUFIsIGtleUdQUiwgaGFzaEdQUik7CisgICAgICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMoaW5kZXhHUFIpOworICAgICAgICBtX2ppdC5leGNlcHRp
b25DaGVjaygpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOworCisgICAgICAg
IG5vdFByZXNlbnRJblRhYmxlLmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tUHRyKG51bGxwdHIpLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0
KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIExvYWRGcm9tSlNNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVj
a2V0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIGF1dG8gbm90QnVja2V0ID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgYnVja2V0R1BSKTsKKyAgICAgICAgbV9qaXQubG9hZDY0KE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJ1Y2tldEdQUiwgSGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZh
bHVlPjo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYXV0byBkb25lID0g
bV9qaXQuanVtcCgpOworCisgICAgICAgIG5vdEJ1Y2tldC5saW5rKCZtX2ppdCk7CisgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSkpLCByZXN1bHRHUFIpOworICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNrZXQ6IHsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYnVja2V0KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgICAgICBHUFJSZWcgYnVja2V0R1BSID0gYnVj
a2V0LmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisg
ICAgICAgIG1faml0LmNvbXBhcmVQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBidWNrZXRH
UFIsIFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgbV9qaXQub3IzMihUcnVz
dGVkSW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBub2RlLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorCiAgICAgY2FzZSBJc09iamVjdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgUmV1c2UsIHZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQx
OCw2ICs3NDE4LDM0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVJlZ0V4cE9iamUK
ICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIoKSk7CiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVjdChFZGdlIGVkZ2UsIEdQUlJlZyBj
ZWxsKQoreworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNwZWNNYXBPYmplY3Qs
IEpTTWFwVHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU1hcE9iamVj
dChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdlLCBTcGVjTWFwT2Jq
ZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3BlcmFu
ZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgb3BlcmFuZC5ncHIo
KSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVNldE9iamVjdChFZGdlIGVk
Z2UsIEdQUlJlZyBjZWxsKQoreworICAgIHNwZWN1bGF0ZUNlbGxUeXBlKGVkZ2UsIGNlbGwsIFNw
ZWNTZXRPYmplY3QsIEpTU2V0VHlwZSk7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0ZVNldE9iamVjdChFZGdlIGVkZ2UpCit7CisgICAgaWYgKCFuZWVkc1R5cGVDaGVjayhlZGdl
LCBTcGVjU2V0T2JqZWN0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgb3BlcmFuZCh0aGlzLCBlZGdlKTsKKyAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwg
b3BlcmFuZC5ncHIoKSk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZU9iamVj
dE9yT3RoZXIoRWRnZSBlZGdlKQogewogICAgIGlmICghbmVlZHNUeXBlQ2hlY2soZWRnZSwgU3Bl
Y09iamVjdCB8IFNwZWNPdGhlcikpCkBAIC03NzA1LDYgKzc3MzMsMTIgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRlKE5vZGUqLCBFZAogICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgog
ICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTWFwT2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU2V0T2JqZWN0VXNlOgorICAgICAgICBzcGVjdWxhdGVT
ZXRPYmplY3QoZWRnZSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVz
ZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0T3JPdGhlcihlZGdlKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMTEsNiArMTMxMSwxMiBAQCBwdWJsaWM6
CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihDX0pJVE9wZXJhdGlvbl9FQ0paIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVn
IGFyZzEsIEdQUlJlZyBhcmcyLCBHUFJSZWcgYXJnMykKKyAgICB7CisgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLCBhcmczKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwogICAg
IEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWljIG9w
ZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVlUmVn
cyBhcmcyLCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKICAgICB7CiAgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLmdwcigpLCBhcmcyLmdwcigpLCBtYXRoSUMpOwpA
QCAtMTc0NSw2ICsxNzUxLDE4IEBAIHB1YmxpYzoKICAgICB9CiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTMyXzY0KQogCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihDX0pJVE9wZXJh
dGlvbl9FQ0paIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEpTVmFsdWVS
ZWdzIGFyZzIsIEdQUlJlZyBhcmczKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIucGF5bG9hZEdQUigpLCBhcmcyLnRhZ0dQUigpLCBh
cmczKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1
bHQpOworICAgIH0KKworICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRP
cGVyYXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxKQor
ICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJC
SVRfRFVNTVlfQVJHIGFyZzEucGF5bG9hZEdQUigpLCBhcmcxLnRhZ0dQUigpKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOworICAgIH0KKwog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRUpKTWlj
IG9wZXJhdGlvbiwgSlNWYWx1ZVJlZ3MgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxLCBKU1ZhbHVl
UmVncyBhcmcyLCBUcnVzdGVkSW1tUHRyIG1hdGhJQykKICAgICB7CiAgICAgICAgIG1faml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxLnBheWxv
YWRHUFIoKSwgYXJnMS50YWdHUFIoKSwgYXJnMi5wYXlsb2FkR1BSKCksIGFyZzIudGFnR1BSKCks
IG1hdGhJQyk7CkBAIC0yNjg5LDYgKzI3MDcsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc3BlY3Vs
YXRlRmluYWxPYmplY3QoRWRnZSk7CiAgICAgdm9pZCBzcGVjdWxhdGVSZWdFeHBPYmplY3QoRWRn
ZSwgR1BSUmVnIGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlUmVnRXhwT2JqZWN0KEVkZ2UpOwor
ICAgIHZvaWQgc3BlY3VsYXRlTWFwT2JqZWN0KEVkZ2UpOworICAgIHZvaWQgc3BlY3VsYXRlTWFw
T2JqZWN0KEVkZ2UsIEdQUlJlZyBjZWxsKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChF
ZGdlKTsKKyAgICB2b2lkIHNwZWN1bGF0ZVNldE9iamVjdChFZGdlLCBHUFJSZWcgY2VsbCk7CiAg
ICAgdm9pZCBzcGVjdWxhdGVPYmplY3RPck90aGVyKEVkZ2UpOwogICAgIHZvaWQgc3BlY3VsYXRl
U3RyaW5nKEVkZ2UgZWRnZSwgR1BSUmVnIGNlbGwpOwogICAgIHZvaWQgc3BlY3VsYXRlU3RyaW5n
SWRlbnRBbmRMb2FkU3RvcmFnZShFZGdlIGVkZ2UsIEdQUlJlZyBzdHJpbmcsIEdQUlJlZyBzdG9y
YWdlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAkocmV2
aXNpb24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsMTIgQEAgdm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFVzZQogICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNlOgogICAgICAgICBv
dXQucHJpbnQoIlJlZ0V4cE9iamVjdCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYXBP
YmplY3RVc2U6CisgICAgICAgIG91dC5wcmludCgiTWFwT2JqZWN0VXNlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNldE9iamVjdFVzZToKKyAgICAgICAgb3V0LnByaW50KCJTZXRPYmpl
Y3RVc2UiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgT2JqZWN0T3JPdGhlclVzZToKICAg
ICAgICAgb3V0LnByaW50KCJPYmplY3RPck90aGVyIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCShyZXZpc2lvbiAyMDU1MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsOCBAQCBlbnVtIFVzZUtpbmQgewogICAgIEtub3duU3RyaW5nVXNlLAogICAg
IEtub3duUHJpbWl0aXZlVXNlLCAvLyBUaGlzIGJpemFycmUgdHlwZSBhcmlzZXMgZm9yIG9wX3N0
cmNhdCwgd2hpY2ggaGFzIGEgYnl0ZWNvZGUgZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCBvbmx5IHNl
ZSBwcmltaXRpdmVzIChpLmUuIG5vdCBvYmplY3RzKS4KICAgICBTeW1ib2xVc2UsCisgICAgTWFw
T2JqZWN0VXNlLAorICAgIFNldE9iamVjdFVzZSwKICAgICBTdHJpbmdPYmplY3RVc2UsCiAgICAg
U3RyaW5nT3JTdHJpbmdPYmplY3RVc2UsCiAgICAgTm90U3RyaW5nVmFyVXNlLApAQCAtMTM0LDYg
KzEzNiwxMCBAQCBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLCiAgICAg
ICAgIHJldHVybiBTcGVjSGVhcFRvcCAmIH5TcGVjT2JqZWN0OwogICAgIGNhc2UgU3ltYm9sVXNl
OgogICAgICAgICByZXR1cm4gU3BlY1N5bWJvbDsKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAg
ICAgICAgcmV0dXJuIFNwZWNNYXBPYmplY3Q7CisgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAg
ICAgIHJldHVybiBTcGVjU2V0T2JqZWN0OwogICAgIGNhc2UgU3RyaW5nT2JqZWN0VXNlOgogICAg
ICAgICByZXR1cm4gU3BlY1N0cmluZ09iamVjdDsKICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2Jq
ZWN0VXNlOgpAQCAtMjIxLDYgKzIyNyw4IEBAIGlubGluZSBib29sIGlzQ2VsbChVc2VLaW5kIGtp
bmQpCiAgICAgY2FzZSBTeW1ib2xVc2U6CiAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6CiAgICAg
Y2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKKyAgICBjYXNlIE1hcE9iamVjdFVzZToKKyAg
ICBjYXNlIFNldE9iamVjdFVzZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDIwNTUxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSAiREZHQXJyYXlNb2Rl
LmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwLmgiCiAjaW5jbHVkZSAiSW5kZXhpbmdUeXBl
LmgiCisjaW5jbHVkZSAiSlNNYXAuaCIKKyNpbmNsdWRlICJKU1NldC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTEwMSw3ICsxMDMsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFN0cnVjdHVyZV9jbGFzc0luZm8sIFN0cnVj
dHVyZTo6Y2xhc3NJbmZvT2Zmc2V0KCkpIFwKICAgICBtYWNybyhTdHJ1Y3R1cmVfZ2xvYmFsT2Jq
ZWN0LCBTdHJ1Y3R1cmU6Omdsb2JhbE9iamVjdE9mZnNldCgpKSBcCiAgICAgbWFjcm8oU3RydWN0
dXJlX3Byb3RvdHlwZSwgU3RydWN0dXJlOjpwcm90b3R5cGVPZmZzZXQoKSkgXAotICAgIG1hY3Jv
KFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKQor
ICAgIG1hY3JvKFN0cnVjdHVyZV9zdHJ1Y3R1cmVJRCwgU3RydWN0dXJlOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSBcCisgICAgbWFjcm8oSlNNYXBfaGFzaE1hcEltcGwsIEpTTWFwOjpvZmZzZXRPZkhh
c2hNYXBJbXBsKCkpIFwKKyAgICBtYWNybyhKU1NldF9oYXNoTWFwSW1wbCwgSlNTZXQ6Om9mZnNl
dE9mSGFzaE1hcEltcGwoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBJbXBsX2NhcGFjaXR5LCBIYXNo
TWFwSW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46Om9mZnNldE9mQ2Fw
YWNpdHkoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBJbXBsX2J1ZmZlciwgIEhhc2hNYXBJbXBsPEhh
c2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6b2Zmc2V0T2ZCdWZmZXIoKSkgXAor
ICAgIG1hY3JvKEhhc2hNYXBCdWNrZXRfdmFsdWUsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXlWYWx1ZT46Om9mZnNldE9mVmFsdWUoKSkgXAorICAgIG1hY3JvKEhhc2hNYXBCdWNr
ZXRfa2V5LCBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRP
ZktleSgpKSBcCiAKICNkZWZpbmUgRk9SX0VBQ0hfSU5ERVhFRF9BQlNUUkFDVF9IRUFQKG1hY3Jv
KSBcCiAgICAgbWFjcm8oRGlyZWN0QXJndW1lbnRzX3N0b3JhZ2UsIERpcmVjdEFyZ3VtZW50czo6
c3RvcmFnZU9mZnNldCgpLCBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSBcCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAyMDU1
MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4MSw2ICsxODEsMTAgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgY2FzZSBJbjoKICAg
ICBjYXNlIElzSlNBcnJheToKKyAgICBjYXNlIE1hcEhhc2g6CisgICAgY2FzZSBHZXRNYXBCdWNr
ZXQ6CisgICAgY2FzZSBMb2FkRnJvbUpTTWFwQnVja2V0OgorICAgIGNhc2UgSXNOb25FbXB0eU1h
cEJ1Y2tldDoKICAgICBjYXNlIElzRW1wdHk6CiAgICAgY2FzZSBJc1VuZGVmaW5lZDoKICAgICBj
YXNlIElzQm9vbGVhbjoKQEAgLTQyNSw2ICs0MjksOCBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29t
cGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6
CiAgICAgICAgICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZToKICAgICAgICAg
ICAgICAgICBjYXNlIFN5bWJvbFVzZToKKyAgICAgICAgICAgICAgICBjYXNlIE1hcE9iamVjdFVz
ZToKKyAgICAgICAgICAgICAgICBjYXNlIFNldE9iamVjdFVzZToKICAgICAgICAgICAgICAgICBj
YXNlIEZpbmFsT2JqZWN0VXNlOgogICAgICAgICAgICAgICAgIGNhc2UgUmVnRXhwT2JqZWN0VXNl
OgogICAgICAgICAgICAgICAgIGNhc2UgTm90Q2VsbFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHJldmlzaW9uIDIwNTUxNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsNiArNzAsNyBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRl
ICJKU0dlbmVyYXRvckZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQu
aCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxl
LmgiCkBAIC04OTgsNiArODk5LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgSXNKU0FycmF5
OgogICAgICAgICAgICAgY29tcGlsZUlzSlNBcnJheSgpOwogICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTWFwSGFzaDoKKyAgICAgICAgICAgIGNvbXBpbGVNYXBIYXNoKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHZXRNYXBCdWNrZXQ6CisgICAgICAgICAgICBj
b21waWxlR2V0TWFwQnVja2V0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBM
b2FkRnJvbUpTTWFwQnVja2V0OgorICAgICAgICAgICAgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNr
ZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElzTm9uRW1wdHlNYXBCdWNr
ZXQ6CisgICAgICAgICAgICBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCgpOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSXNPYmplY3Q6CiAgICAgICAgICAgICBjb21waWxlSXNP
YmplY3QoKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNjI4MSw2ICs2Mjk0LDIyOSBAQCBwcml2
YXRlOgogICAgICAgICBzZXRCb29sZWFuKG1fb3V0LnBoaShJbnQzMiwgbm90Q2VsbFJlc3VsdCwg
Y2VsbFJlc3VsdCkpOwogICAgIH0KIAorICAgIHZvaWQgY29tcGlsZU1hcEhhc2goKQorICAgIHsK
KyAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKwor
ICAgICAgICBMQmFzaWNCbG9jayBpc0NlbGxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAg
ICAgTEJhc2ljQmxvY2sgbm90Q2VsbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
c3RyYWlnaHRIYXNoID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNO
dW1iZXJDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgaXNTdHJp
bmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbm9uRW1wdHlT
dHJpbmdDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGlu
dWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBtX291dC5icmFuY2goCisgICAg
ICAgICAgICBpc0NlbGwodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkpLCB1bnN1
cmUoaXNDZWxsQ2FzZSksIHVuc3VyZShub3RDZWxsKSk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc0NlbGxDYXNlLCBpc1N0cmluZ0Nhc2UpOworICAg
ICAgICBMVmFsdWUgaXNTdHJpbmcgPSBtX291dC5lcXVhbChtX291dC5sb2FkOFplcm9FeHQzMih2
YWx1ZSwgbV9oZWFwcy5KU0NlbGxfdHlwZUluZm9UeXBlKSwgbV9vdXQuY29uc3RJbnQzMihTdHJp
bmdUeXBlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzU3RyaW5nLCB1
bnN1cmUoaXNTdHJpbmdDYXNlKSwgdW5zdXJlKHN0cmFpZ2h0SGFzaCkpOworCisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKGlzU3RyaW5nQ2FzZSwgbm9uRW1wdHlTdHJpbmdDYXNlKTsKKyAgICAgICAg
TFZhbHVlIHN0cmluZ0ltcGwgPSBtX291dC5sb2FkUHRyKHZhbHVlLCBtX2hlYXBzLkpTU3RyaW5n
X3ZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZXF1YWwo
c3RyaW5nSW1wbCwgbV9vdXQuY29uc3RJbnRQdHIoMCkpLCByYXJlbHkoc2xvd0Nhc2UpLCB1c3Vh
bGx5KG5vbkVtcHR5U3RyaW5nQ2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkVt
cHR5U3RyaW5nQ2FzZSwgbm90Q2VsbCk7CisgICAgICAgIExWYWx1ZSBoYXNoID0gbV9vdXQubFNo
cihtX291dC5sb2FkMzIoc3RyaW5nSW1wbCwgbV9oZWFwcy5TdHJpbmdJbXBsX2hhc2hBbmRGbGFn
cyksIG1fb3V0LmNvbnN0SW50MzIoU3RyaW5nSW1wbDo6c19mbGFnQ291bnQpKTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgbm9uRW1wdHlTdHJpbmdIYXNoUmVzdWx0ID0gbV9vdXQuYW5jaG9yKGhh
c2gpOworICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoaGFzaCwgbV9vdXQuY29uc3RJ
bnQzMigwKSksCisgICAgICAgICAgICByYXJlbHkoc2xvd0Nhc2UpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbikpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGwsIGlzTnVtYmVyQ2FzZSk7
CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAgICAgIGlzTnVtYmVyKHZhbHVlKSwgdW5z
dXJlKGlzTnVtYmVyQ2FzZSksIHVuc3VyZShzdHJhaWdodEhhc2gpKTsKKworICAgICAgICBtX291
dC5hcHBlbmRUbyhpc051bWJlckNhc2UsIHN0cmFpZ2h0SGFzaCk7CisgICAgICAgIG1fb3V0LmJy
YW5jaCgKKyAgICAgICAgICAgIGlzSW50MzIodmFsdWUpLCB1bnN1cmUoc3RyYWlnaHRIYXNoKSwg
dW5zdXJlKHNsb3dDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oc3RyYWlnaHRIYXNo
LCBzbG93Q2FzZSk7CisgICAgICAgIC8vIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIExW
YWx1ZSBrZXkgPSB2YWx1ZTsKKyAgICAgICAgTFZhbHVlIHRlbXAgPSBrZXk7CisgICAgICAgIHRl
bXAgPSBtX291dC5zaGwodGVtcCwgbV9vdXQuY29uc3RJbnQzMigzMikpOworICAgICAgICB0ZW1w
ID0gbV9vdXQuYml0Tm90KHRlbXApOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1w
KTsKKyAgICAgICAgLy8ga2V5IF49IChrZXkgPj4gMjIpOworICAgICAgICB0ZW1wID0ga2V5Owor
ICAgICAgICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDIyKSk7Cisg
ICAgICAgIGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0g
fihrZXkgPDwgMTMpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQu
c2hsKHRlbXAsIG1fb3V0LmNvbnN0SW50MzIoMTMpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJp
dE5vdCh0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAg
IC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1w
ID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDgpKTsKKyAgICAgICAga2V5ID0g
bV9vdXQuYml0WG9yKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtleSArPSAoa2V5IDw8IDMpOwor
ICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRlbXAsIG1fb3V0
LmNvbnN0SW50MzIoMykpOworICAgICAgICBrZXkgPSBtX291dC5hZGQoa2V5LCB0ZW1wKTsKKyAg
ICAgICAgLy8ga2V5IF49IChrZXkgPj4gMTUpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAg
ICB0ZW1wID0gbV9vdXQubFNocih0ZW1wLCBtX291dC5jb25zdEludDMyKDE1KSk7CisgICAgICAg
IGtleSA9IG1fb3V0LmJpdFhvcihrZXksIHRlbXApOworICAgICAgICAvLyBrZXkgKz0gfihrZXkg
PDwgMjcpOworICAgICAgICB0ZW1wID0ga2V5OworICAgICAgICB0ZW1wID0gbV9vdXQuc2hsKHRl
bXAsIG1fb3V0LmNvbnN0SW50MzIoMjcpKTsKKyAgICAgICAgdGVtcCA9IG1fb3V0LmJpdE5vdCh0
ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuYWRkKGtleSwgdGVtcCk7CisgICAgICAgIC8vIGtl
eSBePSAoa2V5ID4+IDMxKTsKKyAgICAgICAgdGVtcCA9IGtleTsKKyAgICAgICAgdGVtcCA9IG1f
b3V0LmxTaHIodGVtcCwgbV9vdXQuY29uc3RJbnQzMigzMSkpOworICAgICAgICBrZXkgPSBtX291
dC5iaXRYb3Ioa2V5LCB0ZW1wKTsKKyAgICAgICAga2V5ID0gbV9vdXQuY2FzdFRvSW50MzIoa2V5
KTsKKworICAgICAgICBWYWx1ZUZyb21CbG9jayBmYXN0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGtl
eSk7CisgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcigKKyAgICAgICAgICAgIHZtQ2FsbChJbnQzMiwgbV9v
dXQub3BlcmF0aW9uKG9wZXJhdGlvbk1hcEhhc2gpLCBtX2NhbGxGcmFtZSwgdmFsdWUpKTsKKyAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXRJbnQzMihtX291dC5waGkoSW50
MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQsIG5vbkVtcHR5U3RyaW5nSGFzaFJlc3VsdCkpOwor
ICAgIH0KKworICAgIHZvaWQgY29tcGlsZUdldE1hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBM
QmFzaWNCbG9jayBsb29wU3RhcnQgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNC
bG9jayBsb29wQXJvdW5kID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sg
c2xvd1BhdGggPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RQcmVz
ZW50SW5UYWJsZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vdEVt
cHR5VmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3REZWxl
dGVkVmFsdWUgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBub3RCaXRF
cXVhbCA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleU5v
dENlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJ
c0NlbGwgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBib3RoQXJlQ2Vs
bHMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJc1N0
cmluZyA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGJ1Y2tldEtleUlz
TnVtYmVyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgYm90aEFyZU51
bWJlcnMgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBidWNrZXRLZXlJ
c0ludDMyID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9
IG1fb3V0Lmluc2VydE5ld0Jsb2Nrc0JlZm9yZShsb29wU3RhcnQpOworCisgICAgICAgIExWYWx1
ZSBtYXA7CisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBNYXBPYmpl
Y3RVc2UpCisgICAgICAgICAgICBtYXAgPSBsb3dNYXBPYmplY3QobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIGVsc2UgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFNldE9iamVj
dFVzZSkKKyAgICAgICAgICAgIG1hcCA9IGxvd1NldE9iamVjdChtX25vZGUtPmNoaWxkMSgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KworICAgICAgICBMVmFsdWUga2V5ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgTFZhbHVlIGhhc2ggPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMygpKTsKKworICAgICAg
ICBMVmFsdWUgaGFzaE1hcEltcGwgPSBtX291dC5sb2FkUHRyKG1hcCwgbV9ub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkgPT0gTWFwT2JqZWN0VXNlID8gbV9oZWFwcy5KU01hcF9oYXNoTWFwSW1wbCA6
IG1faGVhcHMuSlNTZXRfaGFzaE1hcEltcGwpOworICAgICAgICBMVmFsdWUgYnVmZmVyID0gbV9v
dXQubG9hZFB0cihoYXNoTWFwSW1wbCwgbV9oZWFwcy5IYXNoTWFwSW1wbF9idWZmZXIpOworICAg
ICAgICBMVmFsdWUgbWFzayA9IG1fb3V0LnN1YihtX291dC5sb2FkMzIoaGFzaE1hcEltcGwsIG1f
aGVhcHMuSGFzaE1hcEltcGxfY2FwYWNpdHkpLCBtX291dC5pbnQzMk9uZSk7CisKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgaW5kZXhTdGFydCA9IG1fb3V0LmFuY2hvcihoYXNoKTsKKyAgICAgICAg
bV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3BTdGFy
dCwgbm90RW1wdHlWYWx1ZSk7CisgICAgICAgIExWYWx1ZSB1bm1hc2tlZEluZGV4ID0gbV9vdXQu
cGhpKEludDMyLCBpbmRleFN0YXJ0KTsKKyAgICAgICAgTFZhbHVlIGluZGV4ID0gbV9vdXQuYml0
QW5kKG1hc2ssIHVubWFza2VkSW5kZXgpOworICAgICAgICBMVmFsdWUgaGFzaE1hcEJ1Y2tldCA9
IG1fb3V0LmxvYWQ2NChtX291dC5iYXNlSW5kZXgobV9oZWFwcy5wcm9wZXJ0aWVzLmF0QW55TnVt
YmVyKCksIGJ1ZmZlciwgbV9vdXQuemVyb0V4dChpbmRleCwgSW50NjQpLCBTY2FsZUVpZ2h0KSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIGJ1Y2tldFJlc3VsdCA9IG1fb3V0LmFuY2hvcihoYXNo
TWFwQnVja2V0KTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmVxdWFsKGhhc2hNYXBCdWNr
ZXQsIG1fb3V0LmNvbnN0SW50UHRyKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1
Y2tldERhdGFLZXk+Pjo6ZW1wdHlWYWx1ZSgpKSksCisgICAgICAgICAgICB1bnN1cmUobm90UHJl
c2VudEluVGFibGUpLCB1bnN1cmUobm90RW1wdHlWYWx1ZSkpOworCisgICAgICAgIG1fb3V0LmFw
cGVuZFRvKG5vdEVtcHR5VmFsdWUsIG5vdERlbGV0ZWRWYWx1ZSk7CisgICAgICAgIG1fb3V0LmJy
YW5jaChtX291dC5lcXVhbChoYXNoTWFwQnVja2V0LCBtX291dC5jb25zdEludFB0cihIYXNoTWFw
SW1wbDxIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OmRlbGV0ZWRWYWx1ZSgp
KSksCisgICAgICAgICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShub3REZWxldGVkVmFs
dWUpKTsKKworICAgICAgICBtX291dC5hcHBlbmRUbyhub3REZWxldGVkVmFsdWUsIG5vdEJpdEVx
dWFsKTsKKyAgICAgICAgTFZhbHVlIGJ1Y2tldEtleSA9IG1fb3V0LmxvYWQ2NChoYXNoTWFwQnVj
a2V0LCBtX2hlYXBzLkhhc2hNYXBCdWNrZXRfa2V5KTsKKyAgICAgICAgLy8gUGVyZm9ybSBPYmpl
Y3QuaXMoKQorICAgICAgICBtX291dC5icmFuY2gobV9vdXQuZXF1YWwoa2V5LCBidWNrZXRLZXkp
LAorICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RCaXRFcXVhbCkp
OworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdEJpdEVxdWFsLCBidWNrZXRLZXlJc0NlbGwp
OworICAgICAgICBtX291dC5icmFuY2goaXNDZWxsKGJ1Y2tldEtleSksCisgICAgICAgICAgICB1
bnN1cmUoYnVja2V0S2V5SXNDZWxsKSwgdW5zdXJlKGJ1Y2tldEtleU5vdENlbGwpKTsKKworICAg
ICAgICBtX291dC5hcHBlbmRUbyhidWNrZXRLZXlJc0NlbGwsIGJvdGhBcmVDZWxscyk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaChpc0NlbGwoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShib3RoQXJl
Q2VsbHMpLCB1bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGJv
dGhBcmVDZWxscywgYnVja2V0S2V5SXNTdHJpbmcpOworICAgICAgICBtX291dC5icmFuY2goaXNT
dHJpbmcoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShidWNrZXRLZXlJc1N0cmluZyks
IHVuc3VyZShsb29wQXJvdW5kKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5
SXNTdHJpbmcsIGJ1Y2tldEtleU5vdENlbGwpOworICAgICAgICBtX291dC5icmFuY2goaXNTdHJp
bmcoa2V5KSwKKyAgICAgICAgICAgIHVuc3VyZShzbG93UGF0aCksIHVuc3VyZShsb29wQXJvdW5k
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5Tm90Q2VsbCwgYnVja2V0S2V5
SXNOdW1iZXIpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3ROdW1iZXIoYnVja2V0S2V5KSwK
KyAgICAgICAgICAgIHVuc3VyZShsb29wQXJvdW5kKSwgdW5zdXJlKGJ1Y2tldEtleUlzTnVtYmVy
KSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVja2V0S2V5SXNOdW1iZXIsIGJvdGhBcmVO
dW1iZXJzKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKGlzTm90TnVtYmVyKGtleSksCisgICAgICAg
ICAgICB1bnN1cmUobG9vcEFyb3VuZCksIHVuc3VyZShib3RoQXJlTnVtYmVycykpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJvdGhBcmVOdW1iZXJzLCBidWNrZXRLZXlJc0ludDMyKTsKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGlzTm90SW50MzIoYnVja2V0S2V5KSwKKyAgICAgICAgICAgIHVu
c3VyZShzbG93UGF0aCksIHVuc3VyZShidWNrZXRLZXlJc0ludDMyKSk7CisKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oYnVja2V0S2V5SXNJbnQzMiwgbG9vcEFyb3VuZCk7CisgICAgICAgIG1fb3V0
LmJyYW5jaChpc05vdEludDMyKGtleSksCisgICAgICAgICAgICB1bnN1cmUoc2xvd1BhdGgpLCB1
bnN1cmUobG9vcEFyb3VuZCkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvb3BBcm91bmQs
IHNsb3dQYXRoKTsKKyAgICAgICAgbV9vdXQuYWRkSW5jb21pbmdUb1BoaSh1bm1hc2tlZEluZGV4
LCBtX291dC5hbmNob3IobV9vdXQuYWRkKGluZGV4LCBtX291dC5pbnQzMk9uZSkpKTsKKyAgICAg
ICAgbV9vdXQuanVtcChsb29wU3RhcnQpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQ
YXRoLCBub3RQcmVzZW50SW5UYWJsZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dQYXRo
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbChwb2ludGVyVHlwZSgpLAorICAgICAgICAgICAg
bV9vdXQub3BlcmF0aW9uKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE1hcE9iamVjdFVz
ZSA/IG9wZXJhdGlvbkpTTWFwRmluZEJ1Y2tldCA6IG9wZXJhdGlvbkpTU2V0RmluZEJ1Y2tldCks
IG1fY2FsbEZyYW1lLCBtYXAsIGtleSwgaGFzaCkpOworICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90UHJlc2VudEluVGFibGUsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIG5vdFByZXNlbnRSZXN1bHQgPSBt
X291dC5hbmNob3IobV9vdXQuY29uc3RJbnRQdHIoMCkpOworICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgICAgIHNldE1hcEJ1Y2tldChtX291dC5waGkocG9pbnRlclR5cGUoKSwgYnVj
a2V0UmVzdWx0LCBzbG93UGF0aFJlc3VsdCwgbm90UHJlc2VudFJlc3VsdCkpOworICAgIH0KKwor
ICAgIHZvaWQgY29tcGlsZUxvYWRGcm9tSlNNYXBCdWNrZXQoKQorICAgIHsKKyAgICAgICAgTFZh
bHVlIG1hcEJ1Y2tldCA9IGxvd01hcEJ1Y2tldChtX25vZGUtPmNoaWxkMSgpKTsKKworICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBoYXNCdWNrZXQgPSBtX291dC5uZXdCbG9jaygpOworCisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIG5vQnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSk7CisKKyAgICAgICAgbV9vdXQuYnJhbmNo
KG1fb3V0LmVxdWFsKG1hcEJ1Y2tldCwgbV9vdXQuY29uc3RJbnRQdHIoMCkpLAorICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShoYXNCdWNrZXQpKTsKKworICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGhhc0J1Y2tldCwgY29udGludWF0
aW9uKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgYnVja2V0UmVzdWx0ID0gbV9vdXQuYW5jaG9y
KG1fb3V0LmxvYWQ2NChtYXBCdWNrZXQsIG1faGVhcHMuSGFzaE1hcEJ1Y2tldF92YWx1ZSkpOwor
ICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldEpTVmFsdWUobV9vdXQucGhp
KEludDY0LCBub0J1Y2tldFJlc3VsdCwgYnVja2V0UmVzdWx0KSk7CisgICAgfQorCisgICAgdm9p
ZCBjb21waWxlSXNOb25FbXB0eU1hcEJ1Y2tldCgpCisgICAgeworICAgICAgICBMVmFsdWUgYnVj
a2V0ID0gbG93TWFwQnVja2V0KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gbV9vdXQubm90RXF1YWwoYnVja2V0LCBtX291dC5jb25zdEludFB0cigwKSk7CisgICAg
ICAgIHNldEJvb2xlYW4ocmVzdWx0KTsKKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVJc09iamVj
dE9yTnVsbCgpCiAgICAgewogICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwpAQCAtOTk4
OSw2ICsxMDIyNSwyMCBAQCBwcml2YXRlOgogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3Qo
ZWRnZSwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBMVmFs
dWUgbG93TWFwT2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQg
PSBsb3dDZWxsKGVkZ2UpOworICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSwgcmVzdWx0
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBMVmFsdWUgbG93U2V0T2Jq
ZWN0KEVkZ2UgZWRnZSkKKyAgICB7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBsb3dDZWxsKGVk
Z2UpOworICAgICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSwgcmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvd1N0cmluZyhFZGdlIGVk
Z2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxh
dGlvbikKICAgICB7CkBAIC0xMDExMiw2ICsxMDM2MiwxNyBAQCBwcml2YXRlOgogICAgICAgICBz
ZXRTdG9yYWdlKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICByZXR1cm4gcmVzdWx0Owog
ICAgIH0KKworICAgIExWYWx1ZSBsb3dNYXBCdWNrZXQoRWRnZSBlZGdlKQorICAgIHsKKyAgICAg
ICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fbWFwQnVja2V0VmFsdWVzLmdldChlZGdlLm5v
ZGUoKSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB2
YWx1ZS52YWx1ZSgpOworICAgICAgICAKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGxvd0NlbGwo
ZWRnZSk7CisgICAgICAgIHNldFN0b3JhZ2UoZWRnZS5ub2RlKCksIHJlc3VsdCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQogICAgIAogICAgIExWYWx1ZSBzdHJpY3RJbnQ1MlRvSW50
MzIoRWRnZSBlZGdlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpAQCAtMTA0MTUsNiArMTA2NzYsMTIg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZWdFeHBPYmplY3RVc2U6CiAgICAgICAgICAgICBz
cGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNYXBPYmplY3RVc2U6CisgICAgICAgICAgICBzcGVjdWxhdGVNYXBPYmplY3QoZWRnZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTZXRPYmplY3RVc2U6CisgICAgICAg
ICAgICBzcGVjdWxhdGVTZXRPYmplY3QoZWRnZSk7CisgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBTdHJpbmdVc2U6CiAgICAgICAgICAgICBzcGVjdWxhdGVTdHJpbmcoZWRnZSk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTEwNzQzLDYgKzExMDEwLDI4IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBzcGVjdWxhdGVSZWdFeHBPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CiAg
ICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSBlZGdlLCBMVmFsdWUgY2Vs
bCkKKyAgICB7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAganNWYWx1ZVZh
bHVlKGNlbGwpLCBlZGdlLCBTcGVjTWFwT2JqZWN0LCBpc05vdFR5cGUoY2VsbCwgSlNNYXBUeXBl
KSk7CisgICAgfQorCisgICAgdm9pZCBzcGVjdWxhdGVNYXBPYmplY3QoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgc3BlY3VsYXRlTWFwT2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOworICAg
IH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwp
CisgICAgeworICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgIGpzVmFsdWVWYWx1
ZShjZWxsKSwgZWRnZSwgU3BlY1NldE9iamVjdCwgaXNOb3RUeXBlKGNlbGwsIEpTU2V0VHlwZSkp
OworICAgIH0KKworICAgIHZvaWQgc3BlY3VsYXRlU2V0T2JqZWN0KEVkZ2UgZWRnZSkKKyAgICB7
CisgICAgICAgIHNwZWN1bGF0ZVNldE9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKKyAgICB9
CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVTdHJpbmcoRWRnZSBlZGdlLCBMVmFsdWUgY2VsbCkK
ICAgICB7CkBAIC0xMTUxMSw2ICsxMTgwMCwxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
bV9zdG9yYWdlVmFsdWVzLnNldChub2RlLCBMb3dlcmVkTm9kZVZhbHVlKHZhbHVlLCBtX2hpZ2hC
bG9jaykpOwogICAgIH0KKyAgICB2b2lkIHNldE1hcEJ1Y2tldChOb2RlKiBub2RlLCBMVmFsdWUg
dmFsdWUpCisgICAgeworICAgICAgICBtX21hcEJ1Y2tldFZhbHVlcy5zZXQobm9kZSwgTG93ZXJl
ZE5vZGVWYWx1ZSh2YWx1ZSwgbV9oaWdoQmxvY2spKTsKKyAgICB9CiAgICAgdm9pZCBzZXREb3Vi
bGUoTm9kZSogbm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgbV9kb3VibGVWYWx1
ZXMuc2V0KG5vZGUsIExvd2VyZWROb2RlVmFsdWUodmFsdWUsIG1faGlnaEJsb2NrKSk7CkBAIC0x
MTU0NCw2ICsxMTgzNywxMCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc2V0U3RvcmFnZSht
X25vZGUsIHZhbHVlKTsKICAgICB9CisgICAgdm9pZCBzZXRNYXBCdWNrZXQoTFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgc2V0TWFwQnVja2V0KG1fbm9kZSwgdmFsdWUpOworICAgIH0KICAg
ICB2b2lkIHNldERvdWJsZShMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICBzZXREb3VibGUo
bV9ub2RlLCB2YWx1ZSk7CkBAIC0xMTcyNyw2ICsxMjAyNCw3IEBAIHByaXZhdGU6CiAgICAgSGFz
aE1hcDxOb2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwogICAgIEhhc2hN
YXA8Tm9kZSosIExvd2VyZWROb2RlVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKICAgICBIYXNoTWFw
PE5vZGUqLCBMb3dlcmVkTm9kZVZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxO
b2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9tYXBCdWNrZXRWYWx1ZXM7CiAgICAgSGFzaE1hcDxO
b2RlKiwgTG93ZXJlZE5vZGVWYWx1ZT4gbV9kb3VibGVWYWx1ZXM7CiAgICAgCiAgICAgLy8gVGhp
cyBpcyBhIGJpdCBvZiBhIGhhY2suIEl0IHByZXZlbnRzIEIzIGZyb20gaGF2aW5nIHRvIGRvIENT
RSBvbiBsb2FkaW5nIG9mIGFyZ3VtZW50cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjI2LDYgKzYyNiw1MiBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdER1bWJWaXJ0dWFsQ2Fs
CiAgICAgICAgIH0pOwogfQogCisjaWYgVVNFKEpTVkFMVUU2NCkKK3ZvaWQgQXNzZW1ibHlIZWxw
ZXJzOjp3YW5nc0ludDY0SGFzaChHUFJSZWcgaW5wdXRBbmRSZXN1bHQsIEdQUlJlZyBzY3JhdGNo
KQoreworICAgIEdQUlJlZyBpbnB1dCA9IGlucHV0QW5kUmVzdWx0OworICAgIC8vIGtleSArPSB+
KGtleSA8PCAzMik7CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1
c3RlZEltbTMyKDMyKSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQo
c2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDIyKTsKKyAgICBtb3ZlKGlu
cHV0LCBzY3JhdGNoKTsKKyAgICB1cnNoaWZ0NjQoVHJ1c3RlZEltbTMyKDIyKSwgc2NyYXRjaCk7
CisgICAgeG9yNjQoc2NyYXRjaCwgaW5wdXQpOworICAgIC8vIGtleSArPSB+KGtleSA8PCAxMyk7
CisgICAgbW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgbHNoaWZ0NjQoVHJ1c3RlZEltbTMyKDEz
KSwgc2NyYXRjaCk7CisgICAgbm90NjQoc2NyYXRjaCk7CisgICAgYWRkNjQoc2NyYXRjaCwgaW5w
dXQpOworICAgIC8vIGtleSBePSAoa2V5ID4+IDgpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gp
OworICAgIHVyc2hpZnQ2NChUcnVzdGVkSW1tMzIoOCksIHNjcmF0Y2gpOworICAgIHhvcjY0KHNj
cmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gKGtleSA8PCAzKTsKKyAgICBtb3ZlKGlucHV0
LCBzY3JhdGNoKTsKKyAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoMyksIHNjcmF0Y2gpOworICAg
IGFkZDY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAxNSk7CisgICAg
bW92ZShpbnB1dCwgc2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigxNSksIHNj
cmF0Y2gpOworICAgIHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgKz0gfihrZXkg
PDwgMjcpOworICAgIG1vdmUoaW5wdXQsIHNjcmF0Y2gpOworICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMigyNyksIHNjcmF0Y2gpOworICAgIG5vdDY0KHNjcmF0Y2gpOworICAgIGFkZDY0KHNjcmF0
Y2gsIGlucHV0KTsKKyAgICAvLyBrZXkgXj0gKGtleSA+PiAzMSk7CisgICAgbW92ZShpbnB1dCwg
c2NyYXRjaCk7CisgICAgdXJzaGlmdDY0KFRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2gpOworICAg
IHhvcjY0KHNjcmF0Y2gsIGlucHV0KTsKKworICAgIC8vIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4ocmVzdWx0KQorICAgIHZvaWQqIG1hc2sgPSBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oVUlOVF9NQVgpKTsKKyAgICBhbmQ2NChUcnVzdGVkSW1tUHRyKG1h
c2spLCBpbnB1dEFuZFJlc3VsdCk7Cit9CisjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCShyZXZpc2lvbiAyMDU1MTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFTU0VSVChtX2Jhc2Vs
aW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6Tm9uZSB8fCBKSVRDb2RlOjppc0Jh
c2VsaW5lQ29kZShtX2Jhc2VsaW5lQ29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKKwogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9jb2Rl
QmxvY2s7IH0KICAgICBWTSogdm0oKSB7IHJldHVybiBtX3ZtOyB9CiAgICAgQXNzZW1ibGVyVHlw
ZV9UJiBhc3NlbWJsZXIoKSB7IHJldHVybiBtX2Fzc2VtYmxlcjsgfQpAQCAtMTUyOCw2ICsxNTI4
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgZW1pdEFsbG9jYXRlSlNPYmplY3Q8Q2xhc3NUeXBlPihy
ZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2Ny
YXRjaEdQUjEsIHNjcmF0Y2hHUFIyLCBzbG93UGF0aCk7CiAgICAgICAgIHN0b3JlUHRyKFRydXN0
ZWRJbW1QdHIoc3RydWN0dXJlLT5jbGFzc0luZm8oKSksIEFkZHJlc3MocmVzdWx0R1BSLCBKU0Rl
c3RydWN0aWJsZU9iamVjdDo6Y2xhc3NJbmZvT2Zmc2V0KCkpKTsKICAgICB9CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIHZvaWQgd2FuZ3NJbnQ2NEhhc2goR1BSUmVnIGlucHV0QW5kUmVzdWx0
LCBHUFJSZWcgc2NyYXRjaCk7CisjZW5kaWYKICAgICAKIHByb3RlY3RlZDoKICAgICBWTSogbV92
bTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDYgKzIwNSw3IEBAIHR5cGVkZWYgSlNDZWxsKiAoSklU
X09QRVJBVElPTiAqQ19KSVRPcGUKIHR5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19K
SVRPcGVyYXRpb25fRVN0WlopKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSosIGludDMyX3QsIGludDMy
X3QpOwogdHlwZWRlZiBKU0NlbGwqIChKSVRfT1BFUkFUSU9OICpDX0pJVE9wZXJhdGlvbl9FWiko
RXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIEpTQ2VsbCogKEpJVF9PUEVSQVRJT04gKkNf
SklUT3BlcmF0aW9uX0VKc2NJKShFeGVjU3RhdGUqLCBKU1Njb3BlKiwgVW5pcXVlZFN0cmluZ0lt
cGwqKTsKK3R5cGVkZWYgSlNDZWxsKiAoSklUX09QRVJBVElPTiAqQ19KSVRPcGVyYXRpb25fRUNK
WikoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QpOwogdHlwZWRl
ZiBkb3VibGUgKEpJVF9PUEVSQVRJT04gKkRfSklUT3BlcmF0aW9uX0QpKGRvdWJsZSk7CiB0eXBl
ZGVmIGRvdWJsZSAoSklUX09QRVJBVElPTiAqRF9KSVRPcGVyYXRpb25fRykoSlNHbG9iYWxPYmpl
Y3QqKTsKIHR5cGVkZWYgZG91YmxlIChKSVRfT1BFUkFUSU9OICpEX0pJVE9wZXJhdGlvbl9ERCko
ZG91YmxlLCBkb3VibGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Nb2R1
bGVBbmFseXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9Nb2R1bGVBbmFseXplci5jcHAJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTW9kdWxlQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiBNb2R1bGVBbmFseXplcjo6TW9kdWxlQW5hbHl6
ZXIoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNv
dXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVk
VmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQog
ICAgIDogbV92bSgmZXhlYy0+dm0oKSkKLSAgICAsIG1fbW9kdWxlUmVjb3JkKGV4ZWMtPnZtKCks
IEpTTW9kdWxlUmVjb3JkOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5tb2R1bGVSZWNvcmRTdHJ1Y3R1cmUoKSwgbW9kdWxlS2V5LCBzb3VyY2VDb2RlLCBk
ZWNsYXJlZFZhcmlhYmxlcywgbGV4aWNhbFZhcmlhYmxlcykpCisgICAgLCBtX21vZHVsZVJlY29y
ZChleGVjLT52bSgpLCBKU01vZHVsZVJlY29yZDo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPnZtKCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+bW9kdWxlUmVjb3JkU3RydWN0dXJlKCksIG1vZHVs
ZUtleSwgc291cmNlQ29kZSwgZGVjbGFyZWRWYXJpYWJsZXMsIGxleGljYWxWYXJpYWJsZXMpKQog
ewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFzaE1hcElt
cGwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGFz
aE1hcEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkhhc2hNYXBJbXBsLmgiCisKKyNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMu
aCIKKyNpbmNsdWRlICJDb3B5VmlzaXRvcklubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K3RlbXBsYXRlPD4KK2NvbnN0IEpTX0VYUE9SVERBVEEgQ2xhc3NJbmZvIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpzX2luZm8gPQorICAgIHsgIkhhc2hNYXBCdWNrZXQiLCBu
dWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXk+KSB9OworCit0ZW1wbGF0ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5m
byBIYXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+OjpzX2luZm8gPQorICAg
IHsgIkhhc2hNYXBCdWNrZXQiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4pIH07CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBEYXRhPgordm9pZCBIYXNoTWFwQnVja2V0PERhdGE+Ojp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSGFzaE1hcEJ1Y2tldCogdGhp
c09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwQnVja2V0Kj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEJhc2U6OnZpc2l0Q2hpbGRy
ZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9uZXh0KTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2KTsKKwor
ICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKERhdGEpICUgc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtu
b3duPikgPT0gMCwgIldlIGFzc3VtZSB0aGF0IHRoZXNlIGFyZSBmaWxsZWQgd2l0aCBXcml0ZUJh
cnJpZXI8VW5rbm93bj4gbWVtYmVycyBvbmx5LiIpOworICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVz
KGJpdHdpc2VfY2FzdDxXcml0ZUJhcnJpZXI8VW5rbm93bj4qPigmdGhpc09iamVjdC0+bV9kYXRh
KSwgc2l6ZW9mKERhdGEpIC8gc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikpOworfQorCit0
ZW1wbGF0ZTw+Citjb25zdCBKU19FWFBPUlREQVRBIENsYXNzSW5mbyBIYXNoTWFwSW1wbDxIYXNo
TWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5Pj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1h
cEltcGwiLCBudWxscHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hN
YXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+PikgfTsKKwordGVtcGxhdGU8PgorY29uc3Qg
SlNfRVhQT1JUREFUQSBDbGFzc0luZm8gSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleVZhbHVlPj46OnNfaW5mbyA9CisgICAgeyAiSGFzaE1hcEltcGwiLCBudWxs
cHRyLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEhhc2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFz
aE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+KSB9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1h
cEJ1Y2tldD4KK3ZvaWQgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldD46OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBIYXNoTWFwSW1wbCog
dGhpc09iamVjdCA9IGpzQ2FzdDxIYXNoTWFwSW1wbCo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19P
QkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKKyAgICBCYXNlOjp2aXNpdENoaWxk
cmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOworCisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1faGVhZCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdGFpbCk7CisK
KyAgICB2aXNpdG9yLmNvcHlMYXRlcih0aGlzT2JqZWN0LCBNYXBCYWNraW5nU3RvcmVDb3B5VG9r
ZW4sIHRoaXNPYmplY3QtPm1fYnVmZmVyLmdldCgpLCB0aGlzT2JqZWN0LT5idWZmZXJTaXplSW5C
eXRlcygpKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBCdWNrZXQ+Cit2b2lkIEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ+Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwg
Q29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0b2tlbikKK3sKKyAgICBCYXNlOjpjb3B5
QmFja2luZ1N0b3JlKGNlbGwsIHZpc2l0b3IsIHRva2VuKTsKKworICAgIEhhc2hNYXBJbXBsKiB0
aGlzT2JqZWN0ID0ganNDYXN0PEhhc2hNYXBJbXBsKj4oY2VsbCk7CisgICAgaWYgKHRva2VuID09
IE1hcEJhY2tpbmdTdG9yZUNvcHlUb2tlbiAmJiB2aXNpdG9yLmNoZWNrSWZTaG91bGRDb3B5KHRo
aXNPYmplY3QtPm1fYnVmZmVyLmdldCgpKSkgeworICAgICAgICBIYXNoTWFwQnVmZmVyVHlwZSog
b2xkQnVmZmVyID0gdGhpc09iamVjdC0+bV9idWZmZXIuZ2V0KCk7CisgICAgICAgIHNpemVfdCBi
dWZmZXJTaXplSW5CeXRlcyA9IHRoaXNPYmplY3QtPmJ1ZmZlclNpemVJbkJ5dGVzKCk7CisgICAg
ICAgIEhhc2hNYXBCdWZmZXJUeXBlKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxIYXNoTWFwQnVm
ZmVyVHlwZSo+KHZpc2l0b3IuYWxsb2NhdGVOZXdTcGFjZShidWZmZXJTaXplSW5CeXRlcykpOwor
ICAgICAgICBtZW1jcHkobmV3QnVmZmVyLCBvbGRCdWZmZXIsIGJ1ZmZlclNpemVJbkJ5dGVzKTsK
KyAgICAgICAgdGhpc09iamVjdC0+bV9idWZmZXIuc2V0V2l0aG91dEJhcnJpZXIobmV3QnVmZmVy
KTsKKyAgICAgICAgdmlzaXRvci5kaWRDb3B5KG9sZEJ1ZmZlciwgYnVmZmVyU2l6ZUluQnl0ZXMp
OworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IYXNoTWFwSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTT2Jq
ZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitzdHJ1Y3QgSGFzaE1hcEJ1Y2tldERhdGFLZXkg
eworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBrZXk7Cit9OworCitzdHJ1Y3QgSGFzaE1hcEJ1
Y2tldERhdGFLZXlWYWx1ZSB7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IGtleTsKKyAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gdmFsdWU7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRGF0
YT4KK2NsYXNzIEhhc2hNYXBCdWNrZXQgOiBwdWJsaWMgSlNDZWxsIHsKKyAgICB0eXBlZGVmIEpT
Q2VsbCBCYXNlOworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRp
YyB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERh
dGFLZXk+Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2bSkK
KyAgICB7CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwQnVja2V0U2V0U3RydWN0dXJlLmdldCgp
OworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBzdGF0aWMg
dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRh
S2V5VmFsdWU+Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUgc2VsZWN0U3RydWN0dXJlKFZNJiB2
bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlLmdl
dCgpOworICAgIH0KKworcHVibGljOgorICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CisKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENl
bGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCisgICAgc3RhdGljIEhh
c2hNYXBCdWNrZXQqIGNyZWF0ZShWTSYgdm0pCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0
KiBidWNrZXQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxIYXNoTWFwQnVja2V0PERhdGE+
Pih2bS5oZWFwKSkgSGFzaE1hcEJ1Y2tldCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAg
ICAgIGJ1Y2tldC0+ZmluaXNoQ3JlYXRpb24odm0pOworICAgICAgICBBU1NFUlQoIWJ1Y2tldC0+
bmV4dCgpKTsKKyAgICAgICAgQVNTRVJUKCFidWNrZXQtPnByZXYoKSk7CisgICAgICAgIHJldHVy
biBidWNrZXQ7CisgICAgfQorCisgICAgSGFzaE1hcEJ1Y2tldChWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlKQorICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKKyAgICB7IH0KKworICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXROZXh0KFZNJiB2bSwgSGFzaE1hcEJ1Y2tldCogYnVja2V0
KQorICAgIHsKKyAgICAgICAgbV9uZXh0LnNldCh2bSwgdGhpcywgYnVja2V0KTsKKyAgICB9Cisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFByZXYoVk0mIHZtLCBIYXNoTWFwQnVja2V0KiBidWNr
ZXQpCisgICAgeworICAgICAgICBtX3ByZXYuc2V0KHZtLCB0aGlzLCBidWNrZXQpOworICAgIH0K
KworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRLZXkoVk0mIHZtLCBKU1ZhbHVlIGtleSkKKyAg
ICB7CisgICAgICAgIG1fZGF0YS5rZXkuc2V0KHZtLCB0aGlzLCBrZXkpOworICAgIH0KKworICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUID0gRGF0YT4KKyAgICBBTFdBWVNfSU5MSU5FIHR5cGVuYW1l
IHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfc2FtZTxULCBIYXNoTWFwQnVja2V0RGF0YUtleVZhbHVl
Pjo6dmFsdWU+Ojp0eXBlIHNldFZhbHVlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIG1fZGF0YS52YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICB9CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5Pjo6dmFsdWU+
Ojp0eXBlIHNldFZhbHVlKFZNJiwgSlNWYWx1ZSkgeyB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEpT
VmFsdWUga2V5KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmtleS5nZXQoKTsgfQorCisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIEFMV0FZU19JTkxJTkUgdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+Ojp2
YWx1ZSwgSlNWYWx1ZT46OnR5cGUgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZGF0YS52YWx1ZS5nZXQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBC
dWNrZXQqIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KKyAgICBBTFdBWVNf
SU5MSU5FIEhhc2hNYXBCdWNrZXQqIHByZXYoKSBjb25zdCB7IHJldHVybiBtX3ByZXYuZ2V0KCk7
IH0KKworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBkZWxldGVkKCkgY29uc3QgeyByZXR1cm4gbV9k
ZWxldGVkOyB9CisgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldERlbGV0ZWQoYm9vbCBkZWxldGVk
KSB7IG1fZGVsZXRlZCA9IGRlbGV0ZWQ7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZLZXkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVj
a2V0LCBtX2RhdGEpICsgT0JKRUNUX09GRlNFVE9GKERhdGEsIGtleSk7CisgICAgfQorCisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBEYXRhPgorICAgIHN0YXRpYyB0eXBlbmFtZSBzdGQ6OmVu
YWJsZV9pZjxzdGQ6OmlzX3NhbWU8VCwgSGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OnZhbHVl
LCBwdHJkaWZmX3Q+Ojp0eXBlIG9mZnNldE9mVmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihIYXNoTWFwQnVja2V0LCBtX2RhdGEpICsgT0JKRUNUX09GRlNFVE9G
KERhdGEsIHZhbHVlKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgRGF0YSBtX2RhdGE7CisgICAg
V3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXQ+IG1fbmV4dDsKKyAgICBXcml0ZUJhcnJpZXI8SGFz
aE1hcEJ1Y2tldD4gbV9wcmV2OworICAgIGJvb2wgbV9kZWxldGVkIHsgZmFsc2UgfTsKK307CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBCdWNrZXRUeXBlPgorY2xhc3MgSGFzaE1hcEJ1ZmZlciB7Citw
dWJsaWM6CisgICAgSGFzaE1hcEJ1ZmZlcigpID0gZGVsZXRlOworCisgICAgc3RhdGljIHNpemVf
dCBhbGxvY2F0aW9uU2l6ZSh1aW50MzJfdCBjYXBhY2l0eSkKKyAgICB7CisgICAgICAgIHJldHVy
biBjYXBhY2l0eSAqIHNpemVvZihCdWNrZXRUeXBlKik7CisgICAgfQorCisgICAgQUxXQVlTX0lO
TElORSBCdWNrZXRUeXBlKiogYnVmZmVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8QnVja2V0VHlwZSoqPih0aGlzKTsKKyAgICB9CisKKyAgICBzdGF0aWMgSGFz
aE1hcEJ1ZmZlciogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCB1aW50MzJfdCBjYXBhY2l0eSkKKyAgICB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSGFzaE1h
cEJ1ZmZlcjo6YWxsb2NhdGlvblNpemUoY2FwYWNpdHkpOworICAgICAgICB2b2lkKiBkYXRhID0g
bnVsbHB0cjsKKyAgICAgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlcih2bS5oZWFwKTsKKyAgICAg
ICAgaWYgKCF2bS5oZWFwLnRyeUFsbG9jYXRlU3RvcmFnZShvd25lciwgYWxsb2NhdGlvblNpemUs
ICZkYXRhKSkgeworICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMsIHNjb3Bl
KTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgSGFz
aE1hcEJ1ZmZlciogYnVmZmVyID0gc3RhdGljX2Nhc3Q8SGFzaE1hcEJ1ZmZlcio+KGRhdGEpOwor
ICAgICAgICBtZW1zZXQoYnVmZmVyLCAtMSwgYWxsb2NhdGlvblNpemUpOworICAgICAgICByZXR1
cm4gYnVmZmVyOworICAgIH0KK307CisKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgYXJlS2V5
c0VxdWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCit7CisgICAgLy8g
V2Ugd2FudCArMCBhbmQgLTAgdG8gYmUgY29tcGFyZWQgdG8gdHJ1ZSBoZXJlLiBzYW1lVmFsdWUo
KSBpdHNlbGYgZG9lc24ndAorICAgIC8vIGd1YXJhbnRlZSB0aGF0LCBob3dldmVyLCB3ZSBub3Jt
YWxpemUgYWxsIGtleXMgYmVmb3JlIGNvbXBhcmluZyBhbmQgc3RvcmluZworICAgIC8vIHRoZW0g
aW4gdGhlIG1hcC4gVGhlIG5vcm1hbGl6YXRpb24gd2lsbCBjb252ZXJ0IC0wLjAgYW5kIDAuMCB0
byB0aGUgaW50ZWdlcgorICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciAwLgorICAgIHJldHVybiBz
YW1lVmFsdWUoZXhlYywgYSwgYik7Cit9CisKK0FMV0FZU19JTkxJTkUgSlNWYWx1ZSBub3JtYWxp
emVNYXBLZXkoSlNWYWx1ZSBrZXkpCit7CisgICAgaWYgKCFrZXkuaXNOdW1iZXIoKSkKKyAgICAg
ICAgcmV0dXJuIGtleTsKKworICAgIGlmIChrZXkuaXNJbnQzMigpKQorICAgICAgICByZXR1cm4g
a2V5OworCisgICAgZG91YmxlIGQgPSBrZXkuYXNEb3VibGUoKTsKKyAgICBpZiAoc3RkOjppc25h
bihkKSkKKyAgICAgICAgcmV0dXJuIGtleTsKKworICAgIGludCBpID0gc3RhdGljX2Nhc3Q8aW50
PihkKTsKKyAgICBpZiAoaSA9PSBkKSB7CisgICAgICAgIC8vIFdoZW4gYSBrZXkgaXMgLTAsIHdl
IGNvbnZlcnQgaXQgdG8gcG9zaXRpdmUgemVyby4KKyAgICAgICAgLy8gV2hlbiBhIGtleSBpcyB0
aGUgZG91YmxlIHJlcHJlc2VudGF0aW9uIGZvciBhbiBpbnRlZ2VyLCB3ZSBjb252ZXJ0IGl0IHRv
IGFuIGludGVnZXIuCisgICAgICAgIHJldHVybiBqc051bWJlcihpKTsKKyAgICB9CisgICAgLy8g
VGhpcyBtZWFucyBrZXkgaXMgZGVmaW5pdGVseSBub3QgbmVnYXRpdmUgemVybywgYW5kIGl0J3Mg
ZGVmaW5pdGVseSBub3QgYSBkb3VibGUgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4gCisg
ICAgcmV0dXJuIGtleTsKK30KKworQUxXQVlTX0lOTElORSB1aW50MzJfdCBqc01hcEhhc2goRXhl
Y1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTVmFsdWUgdmFsdWUpCit7CisgICAgQVNTRVJUX1dJVEhf
TUVTU0FHRShub3JtYWxpemVNYXBLZXkodmFsdWUpID09IHZhbHVlLCAiV2UgZXhwZWN0IG5vcm1h
bGl6ZWQgdmFsdWVzIGZsb3dpbmcgaW50byB0aGlzIGZ1bmN0aW9uLiIpOworCisgICAgYXV0byBz
Y29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworCisgICAgaWYgKHZhbHVlLmlzU3RyaW5n
KCkpIHsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmluZyA9IGFzU3RyaW5nKHZhbHVlKTsKKyAgICAg
ICAgY29uc3QgU3RyaW5nJiB3dGZTdHJpbmcgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOworICAgICAg
ICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuIFVJ
TlRfTUFYOworICAgICAgICByZXR1cm4gd3RmU3RyaW5nLmltcGwoKS0+aGFzaCgpOworICAgIH0K
KworICAgIGF1dG8gd2FuZ3NJbnQ2NEhhc2ggPSBbXSAodWludDY0X3Qga2V5KSAtPiB1aW50MzJf
dCB7CisgICAgICAgIGtleSArPSB+KGtleSA8PCAzMik7CisgICAgICAgIGtleSBePSAoa2V5ID4+
IDIyKTsKKyAgICAgICAga2V5ICs9IH4oa2V5IDw8IDEzKTsKKyAgICAgICAga2V5IF49IChrZXkg
Pj4gOCk7CisgICAgICAgIGtleSArPSAoa2V5IDw8IDMpOworICAgICAgICBrZXkgXj0gKGtleSA+
PiAxNSk7CisgICAgICAgIGtleSArPSB+KGtleSA8PCAyNyk7CisgICAgICAgIGtleSBePSAoa2V5
ID4+IDMxKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihrZXkpOworICAg
IH07CisgICAgdWludDY0X3QgcmF3VmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAg
IHJldHVybiB3YW5nc0ludDY0SGFzaChyYXdWYWx1ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBIYXNoTWFwQnVja2V0VHlwZT4KK2NsYXNzIEhhc2hNYXBJbXBsIDogcHVibGljIEpTQ2VsbCB7
CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWZmZXI8SGFz
aE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBCdWZmZXJUeXBlOworCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBzdGF0aWMgdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+
Pjo6dmFsdWUsIFN0cnVjdHVyZSo+Ojp0eXBlIHNlbGVjdFN0cnVjdHVyZShWTSYgdm0pCisgICAg
eworICAgICAgICByZXR1cm4gdm0uaGFzaE1hcEltcGxTZXRTdHJ1Y3R1cmUuZ2V0KCk7CisgICAg
fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQgPSBIYXNoTWFwQnVja2V0VHlwZT4KKyAgICBz
dGF0aWMgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19zYW1lPFQsIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4+Ojp2YWx1ZSwgU3RydWN0dXJlKj46OnR5cGUg
c2VsZWN0U3RydWN0dXJlKFZNJiB2bSkKKyAgICB7CisgICAgICAgIHJldHVybiB2bS5oYXNoTWFw
SW1wbE1hcFN0cnVjdHVyZS5nZXQoKTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICBERUNMQVJFX0VY
UE9SVF9JTkZPOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworICAgIHN0YXRpYyBIYXNoTWFwSW1wbCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgVk0m
IHZtKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShIYXNoTWFwQnVja2V0PEhh
c2hNYXBCdWNrZXREYXRhS2V5Pjo6b2Zmc2V0T2ZLZXkoKSA9PSBIYXNoTWFwQnVja2V0PEhhc2hN
YXBCdWNrZXREYXRhS2V5VmFsdWU+OjpvZmZzZXRPZktleSgpLCAiV2UgYXNzdW1lIHRoaXMgdG8g
YmUgdHJ1ZSBpbiB0aGUgREZHIGFuZCBGVEwgSklULiIpOworCisgICAgICAgIEhhc2hNYXBJbXBs
KiBpbXBsID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SGFzaE1hcEltcGw+KHZtLmhlYXAp
KSBIYXNoTWFwSW1wbCh2bSwgc2VsZWN0U3RydWN0dXJlKHZtKSk7CisgICAgICAgIGltcGwtPmZp
bmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAg
IHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5
VG9rZW4pOworCisgICAgSGFzaE1hcEltcGwoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCisgICAgICAgICwgbV9zaXplKDApCisgICAg
ICAgICwgbV9kZWxldGVDb3VudCgwKQorICAgICAgICAsIG1fY2FwYWNpdHkoNCkKKyAgICB7Cisg
ICAgfQorCisgICAgQUxXQVlTX0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXIuZ2V0KCktPmJ1ZmZlcigpOworICAg
IH0KKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisg
ICAgeworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
ICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKworICAgICAgICBtYWtlQW5kU2V0TmV3QnVm
ZmVyKGV4ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2hlYWQuc2V0KHZtLCB0aGlzLCBIYXNo
TWFwQnVja2V0VHlwZTo6Y3JlYXRlKHZtKSk7CisgICAgICAgIG1fdGFpbC5zZXQodm0sIHRoaXMs
IEhhc2hNYXBCdWNrZXRUeXBlOjpjcmVhdGUodm0pKTsKKworICAgICAgICBtX2hlYWQtPnNldE5l
eHQodm0sIG1fdGFpbC5nZXQoKSk7CisgICAgICAgIG1fdGFpbC0+c2V0UHJldih2bSwgbV9oZWFk
LmdldCgpKTsKKyAgICAgICAgbV9oZWFkLT5zZXREZWxldGVkKHRydWUpOworICAgICAgICBtX3Rh
aWwtPnNldERlbGV0ZWQodHJ1ZSk7CisKKyAgICB9CisKKyAgICBzdGF0aWMgSGFzaE1hcEJ1Y2tl
dFR5cGUqIGVtcHR5VmFsdWUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxI
YXNoTWFwQnVja2V0VHlwZSo+KHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oLTEpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRW1wdHkoSGFzaE1hcEJ1Y2tldFR5cGUq
IGJ1Y2tldCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWNrZXQgPT0gZW1wdHlWYWx1ZSgpOwor
ICAgIH0KKworICAgIHN0YXRpYyBIYXNoTWFwQnVja2V0VHlwZSogZGVsZXRlZFZhbHVlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGFzaE1hcEJ1Y2tldFR5cGUqPihzdGF0
aWNfY2FzdDx1aW50cHRyX3Q+KC0zKSk7CisgICAgfQorCisgICAgc3RhdGljIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc0RlbGV0ZWQoSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBidWNrZXQgPT0gZGVsZXRlZFZhbHVlKCk7CisgICAgfQorCisgICAgQUxXQVlT
X0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSoqIGZpbmRCdWNrZXQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGtleSkKKyAgICB7CisgICAgICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgICAg
IGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAga2V5ID0gbm9y
bWFsaXplTWFwS2V5KGtleSk7CisgICAgICAgIHVpbnQzMl90IGhhc2ggPSBqc01hcEhhc2goZXhl
Yywgdm0sIGtleSk7CisgICAgICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGZpbmRCdWNrZXQoZXhl
Yywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIEhhc2hNYXBCdWNrZXRU
eXBlKiogZmluZEJ1Y2tldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCB1aW50MzJfdCBo
YXNoKQorICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShub3JtYWxpemVNYXBLZXko
a2V5KSA9PSBrZXksICJXZSBleHBlY3Qgbm9ybWFsaXplZCB2YWx1ZXMgZmxvd2luZyBpbnRvIHRo
aXMgZnVuY3Rpb24uIik7CisgICAgICAgIHJldHVybiBmaW5kQnVja2V0QWxyZWFkeUhhc2hlZEFu
ZE5vcm1hbGl6ZWQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5F
IEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAg
ICBpZiAoSGFzaE1hcEJ1Y2tldFR5cGUqKiBidWNrZXQgPSBmaW5kQnVja2V0KGV4ZWMsIGtleSkp
CisgICAgICAgICAgICByZXR1cm4gKCpidWNrZXQpLT52YWx1ZSgpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzKEV4ZWNT
dGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gISFmaW5kQnVj
a2V0KGV4ZWMsIGtleSk7CisgICAgfQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAg
IHsKKyAgICAgICAga2V5ID0gbm9ybWFsaXplTWFwS2V5KGtleSk7CisKKyAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
dm0pOworCisgICAgICAgIGNvbnN0IHVpbnQzMl90IG1hc2sgPSBtX2NhcGFjaXR5IC0gMTsKKyAg
ICAgICAgdWludDMyX3QgaW5kZXggPSBqc01hcEhhc2goZXhlYywgdm0sIGtleSkgJiBtYXNrOwor
ICAgICAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSoqIGJ1ZmZlciA9IHRoaXMtPmJ1ZmZlcigp
OworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAg
ICAgICAgd2hpbGUgKCFpc0VtcHR5KGJ1Y2tldCkpIHsKKyAgICAgICAgICAgIGlmICghaXNEZWxl
dGVkKGJ1Y2tldCkgJiYgYXJlS2V5c0VxdWFsKGV4ZWMsIGtleSwgYnVja2V0LT5rZXkoKSkpIHsK
KyAgICAgICAgICAgICAgICBidWNrZXQtPnNldFZhbHVlKHZtLCB2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXggPSAoaW5kZXgg
KyAxKSAmIG1hc2s7CisgICAgICAgICAgICBidWNrZXQgPSBidWZmZXJbaW5kZXhdOworICAgICAg
ICB9CisKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5ld0VudHJ5ID0gbV90YWlsLmdldCgp
OworICAgICAgICBidWZmZXJbaW5kZXhdID0gbmV3RW50cnk7CisgICAgICAgIG5ld0VudHJ5LT5z
ZXRLZXkodm0sIGtleSk7CisgICAgICAgIG5ld0VudHJ5LT5zZXRWYWx1ZSh2bSwgdmFsdWUpOwor
ICAgICAgICBuZXdFbnRyeS0+c2V0RGVsZXRlZChmYWxzZSk7CisgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiBuZXdUYWlsID0gSGFzaE1hcEJ1Y2tldFR5cGU6OmNyZWF0ZSh2bSk7CisgICAgICAg
IG1fdGFpbC5zZXQodm0sIHRoaXMsIG5ld1RhaWwpOworICAgICAgICBuZXdUYWlsLT5zZXRQcmV2
KHZtLCBuZXdFbnRyeSk7CisgICAgICAgIG5ld1RhaWwtPnNldERlbGV0ZWQodHJ1ZSk7CisgICAg
ICAgIG5ld0VudHJ5LT5zZXROZXh0KHZtLCBuZXdUYWlsKTsKKyAgICAgICAgdWludDMyX3QgbmV3
U2l6ZSA9ICsrbV9zaXplOworICAgICAgICBpZiAoMipuZXdTaXplID4gbV9jYXBhY2l0eSkKKyAg
ICAgICAgICAgIHJlaGFzaChleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICBIYXNo
TWFwQnVja2V0VHlwZSoqIGJ1Y2tldCA9IGZpbmRCdWNrZXQoZXhlYywga2V5KTsKKyAgICAgICAg
aWYgKCFidWNrZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGltcGwgPSAqYnVja2V0
OworICAgICAgICBpbXBsLT5uZXh0KCktPnNldFByZXYodm0sIGltcGwtPnByZXYoKSk7CisgICAg
ICAgIGltcGwtPnByZXYoKS0+c2V0TmV4dCh2bSwgaW1wbC0+bmV4dCgpKTsKKyAgICAgICAgaW1w
bC0+c2V0RGVsZXRlZCh0cnVlKTsKKworICAgICAgICAqYnVja2V0ID0gZGVsZXRlZFZhbHVlKCk7
CisKKyAgICAgICAgbV9kZWxldGVDb3VudCsrOworCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIEFMV0FZU19JTkxJTkUgdWludDMyX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX3NpemUgPj0gbV9kZWxldGVDb3VudCk7CisgICAgICAgIHJl
dHVybiBtX3NpemUgLSBtX2RlbGV0ZUNvdW50OworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBjbGVhcihFeGVjU3RhdGUqIGV4ZWMpCisgICAgeworICAgICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworICAgICAgICBtX3NpemUgPSAwOworICAgICAgICBtX2RlbGV0ZUNvdW50ID0gMDsK
KyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGhlYWQgPSBtX2hlYWQuZ2V0KCk7CisgICAgICAg
IEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2hlYWQtPm5leHQoKTsKKyAgICAgICAgSGFz
aE1hcEJ1Y2tldFR5cGUqIHRhaWwgPSBtX3RhaWwuZ2V0KCk7CisgICAgICAgIHdoaWxlIChidWNr
ZXQgIT0gdGFpbCkgeworICAgICAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIG5leHQgPSBidWNr
ZXQtPm5leHQoKTsKKyAgICAgICAgICAgIC8vIFdlIHJlc3RhcnQgZWFjaCBpdGVyYXRvciBieSBw
b2ludGluZyBpdCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdC4KKyAgICAgICAgICAgIGJ1Y2tldC0+
c2V0TmV4dCh2bSwgaGVhZCk7CisgICAgICAgICAgICBidWNrZXQgPSBuZXh0OworICAgICAgICB9
CisgICAgICAgIG1faGVhZC0+c2V0TmV4dCh2bSwgbV90YWlsLmdldCgpKTsKKyAgICAgICAgbV90
YWlsLT5zZXRQcmV2KHZtLCBtX2hlYWQuZ2V0KCkpOworICAgICAgICBtX2NhcGFjaXR5ID0gNDsK
KyAgICAgICAgbWFrZUFuZFNldE5ld0J1ZmZlcihleGVjLCB2bSk7CisgICAgfQorCisgICAgQUxX
QVlTX0lOTElORSBzaXplX3QgYnVmZmVyU2l6ZUluQnl0ZXMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY2FwYWNpdHkgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldFR5cGUqKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQnVmZmVyKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+LCBt
X2J1ZmZlcik7CisgICAgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNhcGFjaXR5
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSGFzaE1hcEltcGw8SGFz
aE1hcEJ1Y2tldFR5cGU+LCBtX2NhcGFjaXR5KTsKKyAgICB9CisKKyAgICBIYXNoTWFwQnVja2V0
VHlwZSogaGVhZCgpIHsgcmV0dXJuIG1faGVhZC5nZXQoKTsgfQorICAgIEhhc2hNYXBCdWNrZXRU
eXBlKiB0YWlsKCkgeyByZXR1cm4gbV90YWlsLmdldCgpOyB9CisKKyAgICBzaXplX3QgYXBwcm94
aW1hdGVTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHNpemVfdCBzaXplID0gc2l6ZW9mKEhh
c2hNYXBJbXBsKTsKKyAgICAgICAgc2l6ZSArPSBidWZmZXJTaXplSW5CeXRlcygpOworICAgICAg
ICBzaXplICs9IDIgKiBzaXplb2YoSGFzaE1hcEJ1Y2tldFR5cGUpOyAvLyBIZWFkIGFuZCB0YWls
IG1lbWJlcnMuCisgICAgICAgIHNpemUgKz0gKG1fZGVsZXRlQ291bnQgKyBtX3NpemUpICogc2l6
ZW9mKEhhc2hNYXBCdWNrZXRUeXBlKTsgLy8gTnVtYmVyIG9mIG1lbWJlcnMgb24gdGhlIGxpc3Qu
CisgICAgICAgIHJldHVybiBzaXplOworICAgIH0KKworcHJpdmF0ZToKKyAgICBBTFdBWVNfSU5M
SU5FIEhhc2hNYXBCdWNrZXRUeXBlKiogZmluZEJ1Y2tldEFscmVhZHlIYXNoZWRBbmROb3JtYWxp
emVkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXksIHVpbnQzMl90IGhhc2gpCisgICAgewor
ICAgICAgICBjb25zdCB1aW50MzJfdCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIHVp
bnQzMl90IGluZGV4ID0gaGFzaCAmIG1hc2s7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiog
YnVmZmVyID0gdGhpcy0+YnVmZmVyKCk7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNr
ZXQgPSBidWZmZXJbaW5kZXhdOworCisgICAgICAgIHdoaWxlICghaXNFbXB0eShidWNrZXQpKSB7
CisgICAgICAgICAgICBpZiAoIWlzRGVsZXRlZChidWNrZXQpICYmIGFyZUtleXNFcXVhbChleGVj
LCBrZXksIGJ1Y2tldC0+a2V5KCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBidWZmZXIgKyBp
bmRleDsKKyAgICAgICAgICAgIGluZGV4ID0gKGluZGV4ICsgMSkgJiBtYXNrOworICAgICAgICAg
ICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHJlaGFzaChFeGVjU3RhdGUqIGV4ZWMpCisgICAgewor
ICAgICAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CisKKyAgICAgICAgbV9jYXBhY2l0eSA9IG1fY2FwYWNpdHkgKiAy
OworICAgICAgICBtYWtlQW5kU2V0TmV3QnVmZmVyKGV4ZWMsIHZtKTsKKyAgICAgICAgaWYgKFVO
TElLRUxZKHNjb3BlLmV4Y2VwdGlvbigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBIYXNoTWFwQnVja2V0VHlwZSogaXRlciA9IG1faGVhZC0+bmV4dCgpOworICAgICAgICBIYXNo
TWFwQnVja2V0VHlwZSogZW5kID0gbV90YWlsLmdldCgpOworICAgICAgICBjb25zdCB1aW50MzJf
dCBtYXNrID0gbV9jYXBhY2l0eSAtIDE7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKCEobV9jYXBh
Y2l0eSAmIChtX2NhcGFjaXR5IC0gMSkpKTsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqKiBi
dWZmZXIgPSB0aGlzLT5idWZmZXIoKTsKKyAgICAgICAgd2hpbGUgKGl0ZXIgIT0gZW5kKSB7Cisg
ICAgICAgICAgICB1aW50MzJfdCBpbmRleCA9IGpzTWFwSGFzaChleGVjLCB2bSwgaXRlci0+a2V5
KCkpICYgbWFzazsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoIXNjb3BlLmV4Y2Vw
dGlvbigpLCAiQWxsIGtleXMgc2hvdWxkIGFscmVhZHkgYmUgaGFzaGVkIGJlZm9yZSwgc28gdGhp
cyBzaG91bGQgbm90IHRocm93IGJlY2F1c2UgaXQgd29uJ3QgcmVzb2x2ZSByb3Blcy4iKTsKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0ID0g
YnVmZmVyW2luZGV4XTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoIWlzRW1wdHkoYnVja2V0KSkg
eworICAgICAgICAgICAgICAgICAgICBpbmRleCA9IChpbmRleCArIDEpICYgbWFzazsKKyAgICAg
ICAgICAgICAgICAgICAgYnVja2V0ID0gYnVmZmVyW2luZGV4XTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWZmZXJbaW5kZXhdID0gaXRlcjsKKyAgICAg
ICAgICAgIGl0ZXIgPSBpdGVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IG1ha2VBbmRTZXROZXdCdWZmZXIoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgeworICAg
ICAgICBBU1NFUlQoIShtX2NhcGFjaXR5ICYgKG1fY2FwYWNpdHkgLSAxKSkpOworCisgICAgICAg
IEhhc2hNYXBCdWZmZXJUeXBlKiBidWZmZXIgPSBIYXNoTWFwQnVmZmVyVHlwZTo6Y3JlYXRlKGV4
ZWMsIHZtLCB0aGlzLCBtX2NhcGFjaXR5KTsKKyAgICAgICAgaWYgKFVOTElLRUxZKCFidWZmZXIp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fYnVmZmVyLnNldCh2bSwgdGhpcywg
YnVmZmVyKTsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyBpKyspCisgICAgICAgICAgICAgICAg
QVNTRVJUKGlzRW1wdHkodGhpcy0+YnVmZmVyKClbaV0pKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFdyaXRlQmFycmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV9oZWFkOworICAgIFdyaXRlQmFy
cmllcjxIYXNoTWFwQnVja2V0VHlwZT4gbV90YWlsOworICAgIENvcHlCYXJyaWVyPEhhc2hNYXBC
dWZmZXJUeXBlPiBtX2J1ZmZlcjsKKyAgICB1aW50MzJfdCBtX3NpemU7CisgICAgdWludDMyX3Qg
bV9kZWxldGVDb3VudDsKKyAgICB1aW50MzJfdCBtX2NhcGFjaXR5OworfTsKKworfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMu
aAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDkgQEAgZW51bSBKU19FWFBPUlRf
UFJJVkFURSBJbnRyaW5zaWMgewogICAgIElzUmVnRXhwT2JqZWN0SW50cmluc2ljLAogICAgIElz
VHlwZWRBcnJheVZpZXdJbnRyaW5zaWMsCiAgICAgQm91bmRUaGlzTm9BcmdzRnVuY3Rpb25DYWxs
SW50cmluc2ljLAorICAgIEpTTWFwR2V0SW50cmluc2ljLAorICAgIEpTTWFwSGFzSW50cmluc2lj
LAorICAgIEpTU2V0SGFzSW50cmluc2ljLAogCiAgICAgLy8gR2V0dGVyIGludHJpbnNpY3MuCiAg
ICAgVHlwZWRBcnJheUxlbmd0aEludHJpbnNpYywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjA2LDYg
KzYwNiw5IEBAIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSlNDZWxsKiBhLCAKIAogYm9v
bCBpc1RoaXNWYWx1ZUFsdGVyZWQoY29uc3QgUHV0UHJvcGVydHlTbG90JiwgSlNPYmplY3QqIGJh
c2VPYmplY3QpOwogCisvLyBTZWUgc2VjdGlvbiA3LjIuOTogaHR0cHM6Ly90YzM5LmdpdGh1Yi5p
by9lY21hMjYyLyNzZWMtc2FtZXZhbHVlCitib29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlIGEsIEpTVmFsdWUgYik7CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gSlND
SlNWYWx1ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNTgs
NiArMTA1OCwyMiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgaXNUaGlzVmFsdWVBbHRlcmVkKGNvCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFNlZSBzZWN0aW9uIDcuMi45OiBodHRwczovL3RjMzku
Z2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zYW1ldmFsdWUKK0FMV0FZU19JTkxJTkUgYm9vbCBzYW1l
VmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYikKK3sKKyAgICBpZiAo
IWEuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMs
IGEsIGIpOworICAgIGlmICghYi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZG91YmxlIHggPSBhLmFzTnVtYmVyKCk7CisgICAgZG91YmxlIHkgPSBiLmFzTnVtYmVyKCk7
CisgICAgYm9vbCB4SXNOYU4gPSBzdGQ6OmlzbmFuKHgpOworICAgIGJvb2wgeUlzTmFOID0gc3Rk
Ojppc25hbih5KTsKKyAgICBpZiAoeElzTmFOIHx8IHlJc05hTikKKyAgICAgICAgcmV0dXJuIHhJ
c05hTiAmJiB5SXNOYU47CisgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgPT0g
Yml0d2lzZV9jYXN0PHVpbnQ2NF90Pih5KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNl
bmRpZiAvLyBKU1ZhbHVlSW5saW5lc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0MSw3ICs2NDEsNyBAQCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbih2bSwgdm0u
cHJvcGVyCiAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24odm0sIHZtLnByb3BlcnR5TmFt
ZXMtPlJlZmxlY3QsIHJlZmxlY3RPYmplY3QsIERvbnRFbnVtKTsKIAogICAgIG1fbW9kdWxlTG9h
ZGVyU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNNb2R1bGVMb2FkZXI6OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgbV9tb2R1bGVMb2FkZXJQcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBtX21vZHVs
ZUxvYWRlci5zZXQodm0sIHRoaXMsIEpTTW9kdWxlTG9hZGVyOjpjcmVhdGUodm0sIHRoaXMsIG1f
bW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpKSk7CisgICAgbV9tb2R1bGVMb2FkZXIuc2V0KHZt
LCB0aGlzLCBKU01vZHVsZUxvYWRlcjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdm0sIHRoaXMsIG1f
bW9kdWxlTG9hZGVyU3RydWN0dXJlLmdldCgpKSk7CiAgICAgaWYgKE9wdGlvbnM6OmV4cG9zZUlu
dGVybmFsTW9kdWxlTG9hZGVyKCkpCiAgICAgICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5Mb2FkZXIsIG1fbW9kdWxlTG9hZGVyLmdldCgpLCBEb250
RW51bSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5jcHAJKHJl
dmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMjYsNzggKzI2LDE1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSlNNYXAuaCIKIAotI2luY2x1ZGUgIkNvcGllZEJsb2NrSW5saW5lcy5oIgotI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCi0jaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgot
I2luY2x1ZGUgIk1hcERhdGFJbmxpbmVzLmgiCi0jaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVz
LmgiCi0jaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IENsYXNzSW5mbyBKU01hcDo6c19pbmZvID0g
eyAiTWFwIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShKU01hcCkgfTsK
IAotdm9pZCBKU01hcDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNNYXAqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAgICB0aGlzT2JqZWN0LT5KU01hcDo6fkpT
TWFwKCk7Ci19Ci0KLXNpemVfdCBKU01hcDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCi17
Ci0gICAgSlNNYXAqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNNYXAqPihjZWxsKTsKLSAgICBzaXpl
X3QgbWFwRGF0YVNpemUgPSB0aGlzT2JqZWN0LT5tX21hcERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7
Ci0gICAgcmV0dXJuIEJhc2U6OmVzdGltYXRlZFNpemUoY2VsbCkgKyBtYXBEYXRhU2l6ZTsKLX0K
LQogU3RyaW5nIEpTTWFwOjp0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUq
KQogewogICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIk9iamVjdCIpOwogfQogCi12b2lkIEpTTWFw
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0g
ICAgQmFzZTo6dmlzaXRDaGlsZHJlbihjZWxsLCB2aXNpdG9yKTsKLSAgICBqc0Nhc3Q8SlNNYXAq
PihjZWxsKS0+bV9tYXBEYXRhLnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci19Ci0KLXZv
aWQgSlNNYXA6OmNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiBjZWxsLCBDb3B5VmlzaXRvciYgdmlz
aXRvciwgQ29weVRva2VuIHRva2VuKQotewotICAgIEJhc2U6OmNvcHlCYWNraW5nU3RvcmUoY2Vs
bCwgdmlzaXRvciwgdG9rZW4pOwotICAgIGpzQ2FzdDxKU01hcCo+KGNlbGwpLT5tX21hcERhdGEu
Y29weUJhY2tpbmdTdG9yZSh2aXNpdG9yLCB0b2tlbik7Ci19Ci0KLWJvb2wgSlNNYXA6OmhhcyhF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQotewotICAgIHJldHVybiBtX21hcERhdGEuY29u
dGFpbnMoZXhlYywga2V5KTsKLX0KLQotc2l6ZV90IEpTTWFwOjpzaXplKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gbV9tYXBEYXRhLnNpemUoZXhlYyk7Ci19Ci0KLUpTVmFsdWUgSlNN
YXA6OmdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQotewotICAgIEpTVmFsdWUgcmVz
dWx0ID0gbV9tYXBEYXRhLmdldChleGVjLCBrZXkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIEpT
TWFwOjpzZXQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKLXsK
LSAgICBtX21hcERhdGEuc2V0KGV4ZWMsIHRoaXMsIGtleSwgdmFsdWUpOwotfQotCi12b2lkIEpT
TWFwOjpjbGVhcihFeGVjU3RhdGUqKQotewotICAgIG1fbWFwRGF0YS5jbGVhcigpOwotfQotCi1i
b29sIEpTTWFwOjpyZW1vdmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkKLXsKLSAgICBy
ZXR1cm4gbV9tYXBEYXRhLnJlbW92ZShleGVjLCBrZXkpOwotfQotCiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEwOCArMjYs
NDkgQEAKICNpZm5kZWYgSlNNYXBfaAogI2RlZmluZSBKU01hcF9oCiAKLSNpbmNsdWRlICJKU0Rl
c3RydWN0aWJsZU9iamVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiTWFw
RGF0YS5oIgorI2luY2x1ZGUgIk1hcEJhc2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEpTTWFwSXRlcmF0b3I7CiAKLWNsYXNzIEpTTWFwIDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2Jq
ZWN0IHsKK2NsYXNzIEpTTWFwIDogcHVibGljIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFw
QnVja2V0RGF0YUtleVZhbHVlPj4geworICAgIHR5cGVkZWYgTWFwQmFzZTxIYXNoTWFwQnVja2V0
PEhhc2hNYXBCdWNrZXREYXRhS2V5VmFsdWU+PiBCYXNlOwogcHVibGljOgotICAgIHR5cGVkZWYg
SlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKLQogICAgIGZyaWVuZCBjbGFzcyBKU01hcEl0ZXJh
dG9yOwogCi0gICAgLy8gT3VyIG1hcmtpbmcgZnVuY3Rpb25zIGV4cGVjdCBFbnRyeSB0byBtYWlu
dGFpbiB0aGlzIGxheW91dCwgYW5kIGhhdmUgYWxsCi0gICAgLy8gZmllbGRzIGJlIFdyaXRlQmFy
cmllcjxVbmtub3duPgotICAgIGNsYXNzIEVudHJ5IHsKLSAgICBwcml2YXRlOgotICAgICAgICBX
cml0ZUJhcnJpZXI8VW5rbm93bj4gbV9rZXk7Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3du
PiBtX3ZhbHVlOwotCi0gICAgcHVibGljOgotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5r
bm93bj4mIGtleSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2tleTsK
LSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IFdyaXRlQmFycmllcjxVbmtub3duPiYgdmFsdWUo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIHZvaWQgdmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKLSAg
ICAgICAgewotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJm1fa2V5KTsKLSAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZtX3ZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgc2V0
S2V5KFZNJiB2bSwgY29uc3QgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSBrZXkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIG1fa2V5LnNldCh2bSwgb3duZXIsIGtleSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB2b2lkIHNldEtleVdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSBrZXkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIG1fa2V5LnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoa2V5KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgc2V0VmFsdWUoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVy
LCBKU1ZhbHVlIHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX3ZhbHVlLnNldCh2bSwg
b3duZXIsIHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtX2tleS5jbGVhcigpOwotICAgICAgICAgICAgbV92YWx1ZS5jbGVh
cigpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnks
IEpTTWFwSXRlcmF0b3I+IE1hcERhdGE7Ci0KICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgICAgIHJldHVybiBT
dHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpT
TWFwVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBK
U01hcCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpT
TWFwKiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgIHsKICAgICAgICAgSlNNYXAqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8SlNNYXA+KHZtLmhlYXApKSBKU01hcCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5z
dGFuY2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0
aW9uKGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0
YXRpYyBKU01hcCogY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
a2V5KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXR1cm4gbV9tYXAtPmdldChleGVjLCBrZXkpOwogICAgIH0KIAotICAgIGJv
b2wgaGFzKEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIHNpemVfdCBzaXplKEV4ZWNTdGF0ZSop
OwotICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIEpTVmFsdWUpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgc2V0KEV4ZWNTdGF0ZSosIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVlKTsK
LSAgICB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSopOwotICAgIGJvb2wgcmVtb3ZlKEV4ZWNTdGF0ZSos
IEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXQoRXhlY1N0YXRlKiBleGVjLCBK
U1ZhbHVlIGtleSwgSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fbWFwLT5hZGQoZXhl
Yywga2V5LCB2YWx1ZSk7CisgICAgfQogCiBwcml2YXRlOgogICAgIEpTTWFwKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAg
ICAsIG1fbWFwRGF0YSh2bSwgdGhpcykKICAgICB7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
ZGVzdHJveShKU0NlbGwqKTsKLSAgICBzdGF0aWMgc2l6ZV90IGVzdGltYXRlZFNpemUoSlNDZWxs
Kik7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotICAgIHN0YXRpYyB2b2lkIGNvcHlCYWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3Im
LCBDb3B5VG9rZW4pOwogICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmdOYW1lKGNvbnN0IEpTT2Jq
ZWN0KiwgRXhlY1N0YXRlKik7Ci0KLSAgICBNYXBEYXRhIG1fbWFwRGF0YTsKIH07CiAKIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuY3Bw
CShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01h
cEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQCB2b2lkIEpTTWFw
SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIG1fbWFwLnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOworICAgIHNl
dEl0ZXJhdG9yKHZtLCBtX21hcC0+aW1wbCgpLT5oZWFkKCkpOwogfQogCiB2b2lkIEpTTWFwSXRl
cmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
QEAgLTQ2LDYgKzQ3LDcgQEAgdm9pZCBKU01hcEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bAogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKICAg
ICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21hcCk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1faXRlcik7CiB9CiAKIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBrZXksIEpTVmFsdWUgdmFsdWUpCkBAIC01OSw4ICs2
MSw5IEBAIEpTVmFsdWUgSlNNYXBJdGVyYXRvcjo6Y3JlYXRlUGFpcihDYWxsRnIKIAogSlNNYXBJ
dGVyYXRvciogSlNNYXBJdGVyYXRvcjo6Y2xvbmUoRXhlY1N0YXRlKiBleGVjKQogewotICAgIGF1
dG8gY2xvbmUgPSBKU01hcEl0ZXJhdG9yOjpjcmVhdGUoZXhlYy0+dm0oKSwgZXhlYy0+Y2FsbGVl
KCktPmdsb2JhbE9iamVjdCgpLT5tYXBJdGVyYXRvclN0cnVjdHVyZSgpLCBtX21hcC5nZXQoKSwg
bV9raW5kKTsKLSAgICBjbG9uZS0+bV9pdGVyYXRvciA9IG1faXRlcmF0b3I7CisgICAgVk0mIHZt
ID0gZXhlYy0+dm0oKTsKKyAgICBhdXRvIGNsb25lID0gSlNNYXBJdGVyYXRvcjo6Y3JlYXRlKHZt
LCBleGVjLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCks
IG1fbWFwLmdldCgpLCBtX2tpbmQpOworICAgIGNsb25lLT5zZXRJdGVyYXRvcih2bSwgbV9pdGVy
LmdldCgpKTsKICAgICByZXR1cm4gY2xvbmU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU01hcEl0ZXJhdG9yLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTWFwSXRlcmF0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgSlNNYXBJdGVyYXRv
ciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKKyAgICB0eXBlZGVmIEhhc2hNYXBCdWNrZXQ8
SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT4gSGFzaE1hcEJ1Y2tldFR5cGU7CiBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKQEAgLTUxLDUyICs1Miw2MiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBib29sIG5leHQo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUmIHZhbHVlKQorICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqIGFkdmFuY2VJdGVyKEV4ZWNTdGF0ZSogZXhlYykKICAgICB7Ci0g
ICAgICAgIFdURjo6S2V5VmFsdWVQYWlyPEpTVmFsdWUsIEpTVmFsdWU+IHBhaXI7Ci0gICAgICAg
IGlmICghbV9pdGVyYXRvci5uZXh0KHBhaXIpKQorICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSog
cHJldiA9IG1faXRlci5nZXQoKTsKKyAgICAgICAgaWYgKCFwcmV2KQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBtX2l0ZXIt
Pm5leHQoKTsKKyAgICAgICAgd2hpbGUgKGJ1Y2tldCAmJiBidWNrZXQtPmRlbGV0ZWQoKSkgewor
ICAgICAgICAgICAgcHJldiA9IGJ1Y2tldDsKKyAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tldC0+
bmV4dCgpOworICAgICAgICB9CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBz
ZXRJdGVyYXRvcihleGVjLT52bSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICB9CisgICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIGJ1Y2tldCk7
IC8vIFdlIGtlZXAgbV9pdGVyIG9uIHRoZSBsYXN0IHZhbHVlIHNpbmNlIHRoZSBmaXJzdCB0aGlu
ZyB3ZSBkbyBpbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGwgbmV4dCgpLgorICAgICAgICByZXR1cm4g
YnVja2V0OworICAgIH0KKyAgICBib29sIG5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXBCdWNrZXRUeXBlKiBidWNrZXQgPSBhZHZhbmNl
SXRlcihleGVjKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAgICAgaWYgKG1fa2luZCA9PSBJdGVyYXRlVmFsdWUpCi0gICAgICAgICAgICB2
YWx1ZSA9IHBhaXIudmFsdWU7CisgICAgICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsK
ICAgICAgICAgZWxzZSBpZiAobV9raW5kID09IEl0ZXJhdGVLZXkpCi0gICAgICAgICAgICB2YWx1
ZSA9IHBhaXIua2V5OworICAgICAgICAgICAgdmFsdWUgPSBidWNrZXQtPmtleSgpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoY2FsbEZyYW1lLCBwYWlyLmtl
eSwgcGFpci52YWx1ZSk7CisgICAgICAgICAgICB2YWx1ZSA9IGNyZWF0ZVBhaXIoZXhlYywgYnVj
a2V0LT5rZXkoKSwgYnVja2V0LT52YWx1ZSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCi0gICAgYm9vbCBuZXh0S2V5VmFsdWUoSlNWYWx1ZSYga2V5LCBKU1ZhbHVlJiB2YWx1ZSkK
KyAgICBib29sIG5leHRLZXlWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUmIGtleSwgSlNW
YWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBXVEY6OktleVZhbHVlUGFpcjxKU1ZhbHVlLCBK
U1ZhbHVlPiBwYWlyOwotICAgICAgICBpZiAoIW1faXRlcmF0b3IubmV4dChwYWlyKSkKKyAgICAg
ICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9IGFkdmFuY2VJdGVyKGV4ZWMpOworICAgICAg
ICBpZiAoIWJ1Y2tldCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBrZXkg
PSBwYWlyLmtleTsKLSAgICAgICAgdmFsdWUgPSBwYWlyLnZhbHVlOworICAgICAgICBrZXkgPSBi
dWNrZXQtPmtleSgpOworICAgICAgICB2YWx1ZSA9IGJ1Y2tldC0+dmFsdWUoKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2goKQotICAgIHsKLSAgICAgICAg
bV9pdGVyYXRvci5maW5pc2goKTsKLSAgICB9Ci0KICAgICBJdGVyYXRpb25LaW5kIGtpbmQoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICBKU1ZhbHVlIGl0ZXJhdGVkVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX21hcC5nZXQoKTsgfQogICAgIEpTTWFwSXRlcmF0b3IqIGNsb25lKEV4ZWNT
dGF0ZSopOwogCi0gICAgSlNNYXA6Ok1hcERhdGE6Okl0ZXJhdG9yRGF0YSogaXRlcmF0b3JEYXRh
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9pdGVyYXRvcjsKLSAgICB9Ci0KIHByaXZhdGU6
Ci0gICAgSlNNYXBJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU01hcCog
aXRlcmF0ZWRPYmplY3QsIEl0ZXJhdGlvbktpbmQga2luZCkKKyAgICBKU01hcEl0ZXJhdG9yKFZN
JiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTWFwKiwgSXRlcmF0aW9uS2luZCBraW5kKQog
ICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX2l0ZXJhdG9yKGl0ZXJh
dGVkT2JqZWN0LT5tX21hcERhdGEuY3JlYXRlSXRlcmF0b3JEYXRhKHRoaXMpKQogICAgICAgICAs
IG1fa2luZChraW5kKQorICAgIHsgfQorCisgICAgdm9pZCBzZXRJdGVyYXRvcihWTSYgdm0sIEhh
c2hNYXBCdWNrZXRUeXBlKiBidWNrZXQpCiAgICAgeworICAgICAgICBtX2l0ZXIuc2V0TWF5QmVO
dWxsKHZtLCB0aGlzLCBidWNrZXQpOwogICAgIH0KIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU01hcCopOwpAQCAtMTA0LDcgKzExNSw3IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogCiAgICAgV3JpdGVCYXJyaWVyPEpTTWFwPiBtX21hcDsKLSAgICBKU01hcDo6TWFwRGF0YTo6
SXRlcmF0b3JEYXRhIG1faXRlcmF0b3I7CisgICAgV3JpdGVCYXJyaWVyPEhhc2hNYXBCdWNrZXRU
eXBlPiBtX2l0ZXI7CiAgICAgSXRlcmF0aW9uS2luZCBtX2tpbmQ7CiB9OwogU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTTWFwSXRlcmF0b3IpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmNwcAkocmV2aXNp
b24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVMb2Fk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxMSArNTUsMTQgQEAgSlNNb2R1bGVMb2FkZXI6
OkpTTW9kdWxlTG9hZGVyKFZNJiB2bSwgUwogewogfQogCi12b2lkIEpTTW9kdWxlTG9hZGVyOjpm
aW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCit2b2lk
IEpTTW9kdWxlTG9hZGVyOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIHB1dERpcmVjdCh2bSwg
SWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sICJyZWdpc3RyeSIpLCBKU01hcDo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKSk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMs
IHZtLCBnbG9iYWxPYmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgh
c2NvcGUuZXhjZXB0aW9uKCkpOworICAgIHB1dERpcmVjdCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0
cmluZygmdm0sICJyZWdpc3RyeSIpLCBtYXApOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU01vZHVsZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9kdWxlTG9hZGVyLmgJ
KHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTW9k
dWxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIFJlYWR5ID0gNiwKICAgICB9OwogCi0gICAgc3RhdGljIEpTTW9kdWxlTG9hZGVyKiBj
cmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKKyAgICBzdGF0aWMgSlNNb2R1bGVMb2FkZXIqIGNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCiAgICAgewogICAgICAgICBKU01vZHVsZUxvYWRlciogb2JqZWN0ID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVMb2FkZXI+KHZtLmhlYXApKSBKU01vZHVsZUxvYWRl
cih2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbih2bSwgZ2xv
YmFsT2JqZWN0KTsKKyAgICAgICAgb2JqZWN0LT5maW5pc2hDcmVhdGlvbihleGVjLCB2bSwgZ2xv
YmFsT2JqZWN0KTsKICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICB9CiAKQEAgLTc3LDcgKzc3
LDcgQEAgcHVibGljOgogICAgIEpTVmFsdWUgZXZhbHVhdGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBr
ZXksIEpTVmFsdWUgbW9kdWxlUmVjb3JkLCBKU1ZhbHVlIGluaXRpYXRvcik7CiAKIHByb3RlY3Rl
ZDoKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKKyAgICB2
b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJiwgSlNHbG9iYWxPYmplY3QqKTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNNb2R1bGVSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmNwcAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCwxNCArNDQsMTcgQEAgdm9pZCBKU01vZHVsZVJlY29yZDo6ZGVzdHJveShKU0NlbGwq
IGNlbAogICAgIHRoaXNPYmplY3QtPkpTTW9kdWxlUmVjb3JkOjp+SlNNb2R1bGVSZWNvcmQoKTsK
IH0KIAotdm9pZCBKU01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQordm9pZCBK
U01vZHVsZVJlY29yZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCiB7
CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZv
KCkpKTsKICAgICBwdXREaXJlY3Qodm0sIElkZW50aWZpZXI6OmZyb21TdHJpbmcoJnZtLCBBU0NJ
SUxpdGVyYWwoInJlZ2lzdHJ5RW50cnkiKSksIGpzVW5kZWZpbmVkKCkpOwogICAgIHB1dERpcmVj
dCh2bSwgSWRlbnRpZmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZXZhbHVhdGVk
IikpLCBqc0Jvb2xlYW4oZmFsc2UpKTsKIAotICAgIG1fZGVwZW5kZW5jaWVzTWFwLnNldCh2bSwg
dGhpcywgSlNNYXA6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0KCktPm1hcFN0cnVjdHVyZSgpKSk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTTWFwKiBt
YXAgPSBKU01hcDo6Y3JlYXRlKGV4ZWMsIHZtLCBnbG9iYWxPYmplY3QoKS0+bWFwU3RydWN0dXJl
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCFzY29wZS5leGNlcHRpb24oKSk7CisgICAgbV9kZXBl
bmRlbmNpZXNNYXAuc2V0KHZtLCB0aGlzLCBtYXApOwogICAgIHB1dERpcmVjdCh2bSwgSWRlbnRp
Zmllcjo6ZnJvbVN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgiZGVwZW5kZW5jaWVzTWFwIikpLCBt
X2RlcGVuZGVuY2llc01hcC5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTTW9kdWxlUmVjb3JkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkocmV2aXNpb24gMjA1NTE0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNNb2R1bGVSZWNvcmQuaAkod29ya2luZyBjb3B5
KQpAQCAtODcsMTAgKzg3LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU01vZHVsZVJl
Y29yZCogY3JlYXRlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZp
ZXImIG1vZHVsZUtleSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlQ29kZSwgY29uc3QgVmFyaWFi
bGVFbnZpcm9ubWVudCYgZGVjbGFyZWRWYXJpYWJsZXMsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1l
bnQmIGxleGljYWxWYXJpYWJsZXMpCisgICAgc3RhdGljIEpTTW9kdWxlUmVjb3JkKiBjcmVhdGUo
RXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVu
dGlmaWVyJiBtb2R1bGVLZXksIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFZh
cmlhYmxlRW52aXJvbm1lbnQmIGRlY2xhcmVkVmFyaWFibGVzLCBjb25zdCBWYXJpYWJsZUVudmly
b25tZW50JiBsZXhpY2FsVmFyaWFibGVzKQogICAgIHsKICAgICAgICAgSlNNb2R1bGVSZWNvcmQq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNNb2R1bGVSZWNvcmQ+KHZt
LmhlYXApKSBKU01vZHVsZVJlY29yZCh2bSwgc3RydWN0dXJlLCBtb2R1bGVLZXksIHNvdXJjZUNv
ZGUsIGRlY2xhcmVkVmFyaWFibGVzLCBsZXhpY2FsVmFyaWFibGVzKTsKLSAgICAgICAgaW5zdGFu
Y2UtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KGV4ZWMsIHZtKTsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIApAQCAtMTUyLDcg
KzE1Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgIH0KIAotICAgIHZvaWQgZmluaXNoQ3JlYXRp
b24oVk0mKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSosIFZNJik7CiAKICAg
ICBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogZ2V0TW9kdWxlTmFtZXNwYWNlKEV4ZWNTdGF0ZSop
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXQuY3BwCShyZXZpc2lv
biAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI2LDcwICsyNiwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkpTU2V0LmgiCiAKLSNpbmNsdWRlICJDb3BpZWRCbG9ja0lubGluZXMuaCIKLSNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKLSNpbmNs
dWRlICJNYXBEYXRhSW5saW5lcy5oIgotI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgot
I2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBDbGFzc0luZm8gSlNTZXQ6OnNfaW5mbyA9IHsgIlNl
dCIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNTZXQpIH07CiAKLXZv
aWQgSlNTZXQ6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQotewotICAgIEpTU2V0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTU2V0Kj4oY2VsbCk7Ci0gICAgdGhpc09iamVjdC0+SlNTZXQ6On5KU1NldCgp
OwotfQotCiBTdHJpbmcgSlNTZXQ6OnRvU3RyaW5nTmFtZShjb25zdCBKU09iamVjdCosIEV4ZWNT
dGF0ZSopCiB7CiAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiT2JqZWN0Iik7CiB9CiAKLXNpemVf
dCBKU1NldDo6ZXN0aW1hdGVkU2l6ZShKU0NlbGwqIGNlbGwpCi17Ci0gICAgSlNTZXQqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8SlNTZXQqPihjZWxsKTsKLSAgICBzaXplX3Qgc2V0RGF0YVNpemUgPSB0
aGlzT2JqZWN0LT5tX3NldERhdGEuY2FwYWNpdHlJbkJ5dGVzKCk7Ci0gICAgcmV0dXJuIEJhc2U6
OmVzdGltYXRlZFNpemUoY2VsbCkgKyBzZXREYXRhU2l6ZTsKLX0KLQotdm9pZCBKU1NldDo6dmlz
aXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIEJh
c2U6OnZpc2l0Q2hpbGRyZW4oY2VsbCwgdmlzaXRvcik7Ci0gICAganNDYXN0PEpTU2V0Kj4oY2Vs
bCktPm1fc2V0RGF0YS52aXNpdENoaWxkcmVuKGNlbGwsIHZpc2l0b3IpOwotfQotCi12b2lkIEpT
U2V0Ojpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3Is
IENvcHlUb2tlbiB0b2tlbikKLXsKLSAgICBCYXNlOjpjb3B5QmFja2luZ1N0b3JlKGNlbGwsIHZp
c2l0b3IsIHRva2VuKTsKLSAgICBqc0Nhc3Q8SlNTZXQqPihjZWxsKS0+bV9zZXREYXRhLmNvcHlC
YWNraW5nU3RvcmUodmlzaXRvciwgdG9rZW4pOwotfQotCi1ib29sIEpTU2V0OjpoYXMoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlKQotewotICAgIHJldHVybiBtX3NldERhdGEuY29udGFp
bnMoZXhlYywgdmFsdWUpOwotfQotCi1zaXplX3QgSlNTZXQ6OnNpemUoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBtX3NldERhdGEuc2l6ZShleGVjKTsKLX0KLQotdm9pZCBKU1NldDo6
YWRkKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBtX3NldERhdGEuc2V0
KGV4ZWMsIHRoaXMsIHZhbHVlLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgSlNTZXQ6OmNsZWFyKEV4ZWNT
dGF0ZSopCi17Ci0gICAgbV9zZXREYXRhLmNsZWFyKCk7Ci19Ci0KLWJvb2wgSlNTZXQ6OnJlbW92
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUpCi17Ci0gICAgcmV0dXJuIG1fc2V0RGF0
YS5yZW1vdmUoZXhlYywgdmFsdWUpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1NldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU2V0LmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEwMyArMjYsNDUgQEAKICNpZm5k
ZWYgSlNTZXRfaAogI2RlZmluZSBKU1NldF9oCiAKLSNpbmNsdWRlICJKU0Rlc3RydWN0aWJsZU9i
amVjdC5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCi0jaW5jbHVkZSAiTWFwRGF0YS5oIgorI2lu
Y2x1ZGUgIk1hcEJhc2UuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIEpTU2V0SXRlcmF0
b3I7CiAKLWNsYXNzIEpTU2V0IDogcHVibGljIEpTRGVzdHJ1Y3RpYmxlT2JqZWN0IHsKK2NsYXNz
IEpTU2V0IDogcHVibGljIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eT4+IHsKKyAgICB0eXBlZGVmIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0
YUtleT4+IEJhc2U7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBKU0Rlc3RydWN0aWJsZU9iamVjdCBC
YXNlOwogCiAgICAgZnJpZW5kIGNsYXNzIEpTU2V0SXRlcmF0b3I7CiAKLSAgICAvLyBPdXIgbWFy
a2luZyBmdW5jdGlvbnMgZXhwZWN0IEVudHJ5IHRvIG1haW50YWluIHRoaXMgbGF5b3V0LCBhbmQg
aGF2ZSBhbGwKLSAgICAvLyBmaWVsZHMgYmUgV3JpdGVCYXJyaWVyPFVua25vd24+Ci0gICAgY2xh
c3MgRW50cnkgewotICAgIHByaXZhdGU6Ci0gICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBt
X2tleTsKLQotICAgIHB1YmxpYzoKLSAgICAgICAgY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+
JiBrZXkoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9rZXk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBjb25zdCBXcml0ZUJhcnJpZXI8VW5rbm93bj4mIHZhbHVlKCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fa2V5OwotICAgICAgICB9Ci0KLSAg
ICAgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgICAgICB7
Ci0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmbV9rZXkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRLZXkoVk0mIHZtLCBjb25zdCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlIGtleSkK
LSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuc2V0KHZtLCBvd25lciwga2V5KTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgc2V0S2V5V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlIGtl
eSkKLSAgICAgICAgewotICAgICAgICAgICAgbV9rZXkuc2V0V2l0aG91dFdyaXRlQmFycmllcihr
ZXkpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBzZXRWYWx1ZShWTSYsIGNvbnN0IEpTQ2Vs
bCosIEpTVmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgY2xlYXIo
KQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2tleS5jbGVhcigpOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIHR5cGVkZWYgTWFwRGF0YUltcGw8RW50cnksIEpTU2V0SXRlcmF0b3I+IFNldERh
dGE7Ci0KICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSog
Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpCiAgICAgewotICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUo
dm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1
cmVGbGFncyksIGluZm8oKSk7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKEpTU2V0VHlwZSwgU3RydWN0dXJlRmxh
Z3MpLCBpbmZvKCkpOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgc3RhdGljIEpTU2V0KiBjcmVhdGUoRXhlY1N0YXRl
KiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgSlNT
ZXQqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNTZXQ+KHZtLmhlYXAp
KSBKU1NldCh2bSwgc3RydWN0dXJlKTsKLSAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKGV4ZWMsIHZtKTsKICAgICAg
ICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIHN0YXRpYyBKU1NldCogY3JlYXRlKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUga2V5KQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZShleGVjLT52bSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICBtX21hcC0+YWRkKGV4
ZWMsIGtleSk7CiAgICAgfQogCi0gICAgYm9vbCBoYXMoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0g
ICAgc2l6ZV90IHNpemUoRXhlY1N0YXRlKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
ZGQoRXhlY1N0YXRlKiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBjbGVhcihFeGVjU3RhdGUqKTsKLSAg
ICBib29sIHJlbW92ZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKLQogcHJpdmF0ZToKICAgICBKU1Nl
dChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVj
dHVyZSkKLSAgICAgICAgLCBtX3NldERhdGEodm0sIHRoaXMpCiAgICAgewogICAgIH0KIAotICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7Ci0gICAgc3RhdGljIHNpemVfdCBlc3RpbWF0
ZWRTaXplKEpTQ2VsbCopOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCBjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCos
IENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKICAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nTmFt
ZShjb25zdCBKU09iamVjdCosIEV4ZWNTdGF0ZSopOwotCi0gICAgU2V0RGF0YSBtX3NldERhdGE7
CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nl
dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTZXRJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcg
QEAgdm9pZCBKU1NldEl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdgogewogICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBtX3NldC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2Jq
ZWN0KTsKKyAgICBzZXRJdGVyYXRvcih2bSwgbV9zZXQtPmltcGwoKS0+aGVhZCgpKTsKIH0KIAog
dm9pZCBKU1NldEl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkBAIC00Niw2ICs0Nyw3IEBAIHZvaWQgSlNTZXRJdGVyYXRvcjo6dmlzaXRD
aGlsZHJlbihKU0NlbGwKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3Qs
IGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zZXQpOworICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXIpOwogfQogCiBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNy
ZWF0ZVBhaXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUga2V5LCBKU1ZhbHVlIHZhbHVl
KQpAQCAtNTksOCArNjEsOSBAQCBKU1ZhbHVlIEpTU2V0SXRlcmF0b3I6OmNyZWF0ZVBhaXIoQ2Fs
bEZyCiAKIEpTU2V0SXRlcmF0b3IqIEpTU2V0SXRlcmF0b3I6OmNsb25lKEV4ZWNTdGF0ZSogZXhl
YykKIHsKLSAgICBhdXRvIGNsb25lID0gSlNTZXRJdGVyYXRvcjo6Y3JlYXRlKGV4ZWMtPnZtKCks
IGV4ZWMtPmNhbGxlZSgpLT5nbG9iYWxPYmplY3QoKS0+c2V0SXRlcmF0b3JTdHJ1Y3R1cmUoKSwg
bV9zZXQuZ2V0KCksIG1fa2luZCk7Ci0gICAgY2xvbmUtPm1faXRlcmF0b3IgPSBtX2l0ZXJhdG9y
OworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgYXV0byBjbG9uZSA9IEpTU2V0SXRlcmF0
b3I6OmNyZWF0ZSh2bSwgZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpLT5zZXRJdGVyYXRv
clN0cnVjdHVyZSgpLCBtX3NldC5nZXQoKSwgbV9raW5kKTsKKyAgICBjbG9uZS0+c2V0SXRlcmF0
b3Iodm0sIG1faXRlci5nZXQoKSk7CiAgICAgcmV0dXJuIGNsb25lOwogfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZXRJdGVyYXRvci5oCShyZXZpc2lvbiAy
MDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NldEl0ZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTYgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsNiArMzUsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNz
IEpTU2V0SXRlcmF0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CisgICAgdHlwZWRlZiBI
YXNoTWFwQnVja2V0PEhhc2hNYXBCdWNrZXREYXRhS2V5PiBIYXNoTWFwQnVja2V0VHlwZTsKIHB1
YmxpYzoKICAgICB0eXBlZGVmIEpTTm9uRmluYWxPYmplY3QgQmFzZTsKIApAQCAtNTIsNDYgKzUz
LDU5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIGJv
b2wgbmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSYgdmFsdWUpCisgICAgQUxXQVlT
X0lOTElORSBIYXNoTWFwQnVja2V0VHlwZSogYWR2YW5jZUl0ZXIoRXhlY1N0YXRlKiBleGVjKQog
ICAgIHsKLSAgICAgICAgV1RGOjpLZXlWYWx1ZVBhaXI8SlNWYWx1ZSwgSlNWYWx1ZT4gcGFpcjsK
LSAgICAgICAgaWYgKCFtX2l0ZXJhdG9yLm5leHQocGFpcikpCisgICAgICAgIEhhc2hNYXBCdWNr
ZXRUeXBlKiBwcmV2ID0gbV9pdGVyLmdldCgpOworICAgICAgICBpZiAoIXByZXYpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCA9
IG1faXRlci0+bmV4dCgpOworICAgICAgICB3aGlsZSAoYnVja2V0ICYmIGJ1Y2tldC0+ZGVsZXRl
ZCgpKSB7CisgICAgICAgICAgICBwcmV2ID0gYnVja2V0OworICAgICAgICAgICAgYnVja2V0ID0g
YnVja2V0LT5uZXh0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAg
ICAgICAgIHNldEl0ZXJhdG9yKGV4ZWMtPnZtKCksIG51bGxwdHIpOworICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgc2V0SXRlcmF0b3IoZXhlYy0+dm0oKSwg
YnVja2V0KTsgLy8gV2Uga2VlcCBtX2l0ZXIgb24gdGhlIGxhc3QgdmFsdWUgc2luY2UgdGhlIGZp
cnN0IHRoaW5nIHdlIGRvIGluIHRoaXMgZnVuY3Rpb24gaXMgY2FsbCBuZXh0KCkuCisgICAgICAg
IHJldHVybiBidWNrZXQ7CisgICAgfQorCisgICAgYm9vbCBuZXh0KEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICBIYXNoTWFwQnVja2V0VHlwZSogYnVja2V0
ID0gYWR2YW5jZUl0ZXIoZXhlYyk7CisgICAgICAgIGlmICghYnVja2V0KQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgICAgIGlmIChtX2tpbmQgPT0gSXRlcmF0ZVZhbHVlIHx8IG1f
a2luZCA9PSBJdGVyYXRlS2V5KQotICAgICAgICAgICAgdmFsdWUgPSBwYWlyLmtleTsKKyAgICAg
ICAgICAgIHZhbHVlID0gYnVja2V0LT5rZXkoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
dmFsdWUgPSBjcmVhdGVQYWlyKGNhbGxGcmFtZSwgcGFpci5rZXksIHBhaXIua2V5KTsKKyAgICAg
ICAgICAgIHZhbHVlID0gY3JlYXRlUGFpcihleGVjLCBidWNrZXQtPmtleSgpLCBidWNrZXQtPmtl
eSgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdm9pZCBmaW5pc2goKQot
ICAgIHsKLSAgICAgICAgbV9pdGVyYXRvci5maW5pc2goKTsKLSAgICB9Ci0KICAgICBJdGVyYXRp
b25LaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICBKU1ZhbHVlIGl0ZXJh
dGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NldC5nZXQoKTsgfQogICAgIEpTU2V0SXRlcmF0
b3IqIGNsb25lKEV4ZWNTdGF0ZSopOwogCi0gICAgSlNTZXQ6OlNldERhdGE6Okl0ZXJhdG9yRGF0
YSogaXRlcmF0b3JEYXRhKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAmbV9pdGVyYXRvcjsKLSAg
ICB9Ci0KIHByaXZhdGU6Ci0gICAgSlNTZXRJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBKU1NldCogaXRlcmF0ZWRPYmplY3QsIEl0ZXJhdGlvbktpbmQga2luZCkKKyAgICBK
U1NldEl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTU2V0KiwgSXRlcmF0
aW9uS2luZCBraW5kKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBt
X2l0ZXJhdG9yKGl0ZXJhdGVkT2JqZWN0LT5tX3NldERhdGEuY3JlYXRlSXRlcmF0b3JEYXRhKHRo
aXMpKQogICAgICAgICAsIG1fa2luZChraW5kKQogICAgIHsKICAgICB9CiAKKyAgICB2b2lkIHNl
dEl0ZXJhdG9yKFZNJiB2bSwgSGFzaE1hcEJ1Y2tldFR5cGUqIGJ1Y2tldCkKKyAgICB7CisgICAg
ICAgIG1faXRlci5zZXRNYXlCZU51bGwodm0sIHRoaXMsIGJ1Y2tldCk7IAorICAgIH0KKwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU1NldCopOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIEpTVmFsdWUgY3JlYXRlUGFpcihDYWxsRnJhbWUqLCBKU1ZhbHVl
LCBKU1ZhbHVlKTsKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RW
aXNpdG9yJik7CiAKICAgICBXcml0ZUJhcnJpZXI8SlNTZXQ+IG1fc2V0OwotICAgIEpTU2V0OjpT
ZXREYXRhOjpJdGVyYXRvckRhdGEgbV9pdGVyYXRvcjsKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1h
cEJ1Y2tldFR5cGU+IG1faXRlcjsKICAgICBJdGVyYXRpb25LaW5kIG1fa2luZDsKIH07CiBTVEFU
SUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNTZXRJdGVyYXRvcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1R5cGUuaAkocmV2aXNpb24gMjA1NTE0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgyLDggKzgyLDEwIEBAIGVudW0gSlNUeXBlIDogdWludDhfdCB7CiAgICAgTW9kdWxlRW52
aXJvbm1lbnRUeXBlLAogICAgIFJlZ0V4cE9iamVjdFR5cGUsCiAgICAgUHJveHlPYmplY3RUeXBl
LAorICAgIEpTTWFwVHlwZSwKKyAgICBKU1NldFR5cGUsCiAKLSAgICBMYXN0SlNDT2JqZWN0VHlw
ZSA9IFByb3h5T2JqZWN0VHlwZSwKKyAgICBMYXN0SlNDT2JqZWN0VHlwZSA9IEpTU2V0VHlwZSwK
IH07CiAKIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU1R5cGUpID09IHNpemVvZih1aW50OF90KSwg
c2l6ZW9mX2pzdHlwZV9pc19vbmVfYnl0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9NYXBCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL01hcEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIk1hcEJhc2UuaCIKKworI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEhhc2hNYXBC
dWNrZXRUeXBlPgordm9pZCBNYXBCYXNlPEhhc2hNYXBCdWNrZXRUeXBlPjo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIE1hcEJhc2UqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxNYXBCYXNlKj4oY2VsbCk7CisgICAgQmFzZTo6dmlzaXRD
aGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9tYXApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+
CitzaXplX3QgTWFwQmFzZTxIYXNoTWFwQnVja2V0VHlwZT46OmVzdGltYXRlZFNpemUoSlNDZWxs
KiBjZWxsKQoreworICAgIHJldHVybiBCYXNlOjplc3RpbWF0ZWRTaXplKGNlbGwpICsgc3RhdGlj
X2Nhc3Q8TWFwQmFzZSo+KGNlbGwpLT5tX21hcC0+YXBwcm94aW1hdGVTaXplKCk7Cit9CisKK3Rl
bXBsYXRlIGNsYXNzIE1hcEJhc2U8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtleVZh
bHVlPj47Cit0ZW1wbGF0ZSBjbGFzcyBNYXBCYXNlPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tl
dERhdGFLZXk+PjsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9NYXBCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwQmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTWFwQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJIYXNoTWFwSW1wbC5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSGFzaE1hcEJ1Y2tldFR5cGU+Citj
bGFzcyBNYXBCYXNlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgeworICAgIHR5cGVkZWYgSGFz
aE1hcEltcGw8SGFzaE1hcEJ1Y2tldFR5cGU+IEhhc2hNYXBJbXBsVHlwZTsKKyAgICB0eXBlZGVm
IEpTTm9uRmluYWxPYmplY3QgQmFzZTsKK3B1YmxpYzoKKworICAgIHR5cGVkZWYgSGFzaE1hcEJ1
Y2tldFR5cGUgQnVja2V0VHlwZTsKKworICAgIEFMV0FZU19JTkxJTkUgc2l6ZV90IHNpemUoRXhl
Y1N0YXRlKikKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+c2l6ZSgpOworICAgIH0KKwor
ICAgIEFMV0FZU19JTkxJTkUgYm9vbCBoYXMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGtleSkK
KyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC0+aGFzKGV4ZWMsIGtleSk7CisgICAgfQorCisg
ICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyKEV4ZWNTdGF0ZSogZXhlYykKKyAgICB7CisgICAg
ICAgIG1fbWFwLT5jbGVhcihleGVjKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wg
cmVtb3ZlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBrZXkpCisgICAgeworICAgICAgICByZXR1
cm4gbV9tYXAtPnJlbW92ZShleGVjLCBrZXkpOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
SGFzaE1hcEJ1Y2tldFR5cGUqKiBmaW5kQnVja2V0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBr
ZXksIHVpbnQzMl90IGhhc2gpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAtPmZpbmRCdWNr
ZXQoZXhlYywga2V5LCBoYXNoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mSGFzaE1hcEltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihN
YXBCYXNlPEhhc2hNYXBCdWNrZXRUeXBlPiwgbV9tYXApOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgSGFzaE1hcEltcGxUeXBlKiBpbXBsKCkgeyByZXR1cm4gbV9tYXAuZ2V0KCk7IH0KKwor
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0pCisgICAgewor
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIGF1dG8gc2NvcGUgPSBE
RUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICAgICAgSGFzaE1hcEltcGxUeXBlKiBpbXBsID0g
SGFzaE1hcEltcGxUeXBlOjpjcmVhdGUoZXhlYywgdm0pOworICAgICAgICBpZiAoVU5MSUtFTFko
c2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX21hcC5z
ZXQodm0sIHRoaXMsIGltcGwpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIE1hcEJhc2UoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUp
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVkU2l6ZShKU0NlbGwq
KTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKKyAgICBXcml0ZUJhcnJpZXI8SGFzaE1hcEltcGxUeXBlPiBtX21hcDsKK307CisKK30gLy8g
bmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwQ29u
c3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hcENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw5
ICs2MSwxMSBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zCiAKICAg
ICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGV4ZWMt
PmNhbGxlZSgpKS0+Z2xvYmFsT2JqZWN0KCk7CiAgICAgU3RydWN0dXJlKiBtYXBTdHJ1Y3R1cmUg
PSBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdWJjbGFzc1N0cnVjdHVyZShleGVjLCBleGVjLT5u
ZXdUYXJnZXQoKSwgZ2xvYmFsT2JqZWN0LT5tYXBTdHJ1Y3R1cmUoKSk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgIGlmIChVTkxJS0VMWShzY29wZS5leGNlcHRpb24oKSkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKKyAgICBKU01hcCogbWFw
ID0gSlNNYXA6OmNyZWF0ZShleGVjLCB2bSwgbWFwU3RydWN0dXJlKTsKKyAgICBpZiAoVU5MSUtF
TFkoc2NvcGUuZXhjZXB0aW9uKCkpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoKSk7Ci0gICAgSlNNYXAqIG1hcCA9IEpTTWFwOjpjcmVhdGUoZXhlYywgbWFwU3RydWN0
dXJlKTsKICAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgaWYg
KGl0ZXJhYmxlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUobWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJh
dG9yUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1h
cEl0ZXJhdG9yCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNh
bGxGcmFtZSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJ
dGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKLSAgICBpdGVy
YXRvci0+ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRv
clJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90b3R5cGUuY3BwCShy
ZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBQcm90
b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNCArNjgsMTMgQEAgdm9pZCBNYXBQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bQogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9X
SVRIT1VUX1RSQU5TSVRJT04odm0ucHJvcGVydHlOYW1lcy0+Y2xlYXIsIG1hcFByb3RvRnVuY0Ns
ZWFyLCBEb250RW51bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5T
SVRJT04odm0ucHJvcGVydHlOYW1lcy0+ZGVsZXRlS2V5d29yZCwgbWFwUHJvdG9GdW5jRGVsZXRl
LCBEb250RW51bSwgMSk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJ
T04odm0ucHJvcGVydHlOYW1lcy0+Z2V0LCBtYXBQcm90b0Z1bmNHZXQsIERvbnRFbnVtLCAxKTsK
LSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5h
bWVzLT5oYXMsIG1hcFByb3RvRnVuY0hhcywgRG9udEVudW0sIDEpOworICAgIEpTQ19OQVRJVkVf
SU5UUklOU0lDX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5n
ZXQsIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2ljKTsKKyAg
ICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+aGFzLCBtYXBQcm90b0Z1bmNIYXMsIERvbnRFbnVtLCAxLCBKU01hcEhhc0lu
dHJpbnNpYyk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0u
cHJvcGVydHlOYW1lcy0+c2V0LCBtYXBQcm90b0Z1bmNTZXQsIERvbnRFbnVtLCAyKTsKICAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5i
dWlsdGluTmFtZXMoKS5rZXlzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1bmNLZXlzLCBEb250RW51
bSwgMCk7CiAgICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkudmFsdWVzUHVibGljTmFtZSgpLCBtYXBQcm90b0Z1
bmNWYWx1ZXMsIERvbnRFbnVtLCAwKTsKIAotICAgIC8vIFByaXZhdGUgZ2V0IC8gc2V0IG9wZXJh
dGlvbnMuCi0gICAgSlNDX05BVElWRV9GVU5DVElPTl9XSVRIT1VUX1RSQU5TSVRJT04odm0ucHJv
cGVydHlOYW1lcy0+YnVpbHRpbk5hbWVzKCkuZ2V0UHJpdmF0ZU5hbWUoKSwgbWFwUHJvdG9GdW5j
R2V0LCBEb250RW51bSwgMSk7CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lU
SE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmdldFByaXZh
dGVOYW1lKCksIG1hcFByb3RvRnVuY0dldCwgRG9udEVudW0sIDEsIEpTTWFwR2V0SW50cmluc2lj
KTsKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0
eU5hbWVzLT5idWlsdGluTmFtZXMoKS5zZXRQcml2YXRlTmFtZSgpLCBtYXBQcm90b0Z1bmNTZXQs
IERvbnRFbnVtLCAyKTsKIAogICAgIEpTRnVuY3Rpb24qIGVudHJpZXMgPSBKU0Z1bmN0aW9uOjpj
cmVhdGUodm0sIGdsb2JhbE9iamVjdCwgMCwgdm0ucHJvcGVydHlOYW1lcy0+YnVpbHRpbk5hbWVz
KCkuZW50cmllc1B1YmxpY05hbWUoKS5zdHJpbmcoKSwgbWFwUHJvdG9GdW5jRW50cmllcyk7CkBA
IC05MSwxNiArOTAsMjEgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNNYXAqIGdldE1hcChDYWxs
RgogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRvIHNjb3BlID0gREVDTEFS
RV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIXRoaXNWYWx1ZS5pc09iamVjdCgpKSB7Cisg
ICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CiAgICAgICAgIHRocm93Vk1F
cnJvcihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVycm9yKGNhbGxGcmFtZSwg
dGhpc1ZhbHVlKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICBKU01hcCog
bWFwID0ganNEeW5hbWljQ2FzdDxKU01hcCo+KHRoaXNWYWx1ZSk7Ci0gICAgaWYgKCFtYXApIHsK
LSAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwgQVNDSUlMaXRlcmFsKCJN
YXAgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tTWFwIG9iamVjdCIpKTsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBtYXA7CisKKyAgICBpZiAoTElLRUxZKHRoaXNW
YWx1ZS5hc0NlbGwoKS0+dHlwZSgpID09IEpTTWFwVHlwZSkpCisgICAgICAgIHJldHVybiBqc0Nh
c3Q8SlNNYXAqPih0aGlzVmFsdWUpOworICAgIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2Nv
cGUsIEFTQ0lJTGl0ZXJhbCgiTWFwIG9wZXJhdGlvbiBjYWxsZWQgb24gbm9uLU1hcCBvYmplY3Qi
KSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgcHJpdmF0ZUZ1bmNJc01hcChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgSlNWYWx1ZSB2YWx1
ZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNCb29sZWFuKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT50eXBlKCkgPT0g
SlNNYXBUeXBlKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9G
dW5jQ2xlYXIoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC0xODcsMTEgKzE5MSw2IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWFwUHJvdG9GdW4KICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTTWFwSXRlcmF0b3I6OmNyZWF0ZSh2bSwgY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xv
YmFsT2JqZWN0KCktPm1hcEl0ZXJhdG9yU3RydWN0dXJlKCksIHRoaXNPYmosIEl0ZXJhdGVLZXkp
KTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuY0lzTWFwKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihq
c0R5bmFtaWNDYXN0PEpTTWFwKj4oZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpKSk7Ci19Ci0K
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcHJpdmF0ZUZ1bmNNYXBJdGVyYXRvcihFeGVj
U3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSkpOwpAQCAtMjA0LDEzICsyMDMsMTIgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBwcml2YXRlRnVuYwogICAgIEFTU0VSVChqc0R5bmFtaWNDYXN0PEpT
TWFwSXRlcmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSkpOwogICAgIEpTTWFwSXRlcmF0b3IqIGl0
ZXJhdG9yID0ganNDYXN0PEpTTWFwSXRlcmF0b3IqPihleGVjLT50aGlzVmFsdWUoKSk7CiAgICAg
SlNWYWx1ZSBrZXksIHZhbHVlOwotICAgIGlmIChpdGVyYXRvci0+bmV4dEtleVZhbHVlKGtleSwg
dmFsdWUpKSB7CisgICAgaWYgKGl0ZXJhdG9yLT5uZXh0S2V5VmFsdWUoZXhlYywga2V5LCB2YWx1
ZSkpIHsKICAgICAgICAgSlNBcnJheSogcmVzdWx0QXJyYXkgPSBqc0Nhc3Q8SlNBcnJheSo+KGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICAgICAgcmVzdWx0QXJyYXktPnB1dERpcmVj
dEluZGV4KGV4ZWMsIDAsIGtleSk7CiAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRl
eChleGVjLCAxLCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29s
ZWFuKGZhbHNlKSk7CiAgICAgfQotICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkocmV2
aXNpb24gMjA1NTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlE
ZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDIyICsxOTEsNiBAQCB2b2lkIFBy
b3BlcnR5RGVzY3JpcHRvcjo6c2V0R2V0dGVyKEpTVmFsCiAgICAgbV9hdHRyaWJ1dGVzICY9IH5S
ZWFkT25seTsKIH0KIAotLy8gU2VlIEVTNS4xIDkuMTIKLWJvb2wgc2FtZVZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpCi17Ci0gICAgaWYgKCFhLmlzTnVtYmVyKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBhLCBiKTsKLSAgICBp
ZiAoIWIuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRvdWJsZSB4ID0g
YS5hc051bWJlcigpOwotICAgIGRvdWJsZSB5ID0gYi5hc051bWJlcigpOwotICAgIGJvb2wgeElz
TmFOID0gc3RkOjppc25hbih4KTsKLSAgICBib29sIHlJc05hTiA9IHN0ZDo6aXNuYW4oeSk7Ci0g
ICAgaWYgKHhJc05hTiB8fCB5SXNOYU4pCi0gICAgICAgIHJldHVybiB4SXNOYU4gJiYgeUlzTmFO
OwotICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpID09IGJpdHdpc2VfY2FzdDx1
aW50NjRfdD4oeSk7Ci19Ci0KIGJvb2wgUHJvcGVydHlEZXNjcmlwdG9yOjplcXVhbFRvKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvdGhlcikgY29uc3QKIHsKICAg
ICBpZiAob3RoZXIubV92YWx1ZS5pc0VtcHR5KCkgIT0gbV92YWx1ZS5pc0VtcHR5KCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRv
ci5oCShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgR2V0dGVyU2V0dGVyOwogCi0vLyBTZWUgRVM1LjEgOS4xMgot
Ym9vbCBzYW1lVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgSlNWYWx1ZSk7Ci0KIGNsYXNzIFBy
b3BlcnR5RGVzY3JpcHRvciB7CiBwdWJsaWM6CiAgICAgUHJvcGVydHlEZXNjcmlwdG9yKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldENvbnN0cnVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Nl
dENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsOSArNjIsMTEgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29ucwogCiAgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IGFzSW50ZXJuYWxGdW5jdGlvbihleGVjLT5jYWxsZWUoKSktPmdsb2Jh
bE9iamVjdCgpOwogICAgIFN0cnVjdHVyZSogc2V0U3RydWN0dXJlID0gSW50ZXJuYWxGdW5jdGlv
bjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUoZXhlYywgZXhlYy0+bmV3VGFyZ2V0KCksIGdsb2Jh
bE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICBpZiAoVU5MSUtFTFkoc2NvcGUuZXhjZXB0aW9uKCkpKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7CisgICAgSlNTZXQqIHNldCA9IEpTU2V0OjpjcmVhdGUo
ZXhlYywgdm0sIHNldFN0cnVjdHVyZSk7CisgICAgaWYgKFVOTElLRUxZKHNjb3BlLmV4Y2VwdGlv
bigpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotICAgIEpT
U2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKGV4ZWMsIHNldFN0cnVjdHVyZSk7CiAgICAgSlNWYWx1
ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIGlmIChpdGVyYWJsZS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHNldCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQ
cm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcg
KzU4LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBTZXRJdGVyYXRvcgogCiAgICAg
aWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3Vs
dCwgZmFsc2UpKTsKLSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjcmVhdGVJdGVyYXRvclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVk
KCksIHRydWUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TZXRQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TZXRQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw3ICs2
OCw3IEBAIHZvaWQgU2V0UHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0KICAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OX1dJVEhPVVRfVFJBTlNJVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5hZGQs
IHNldFByb3RvRnVuY0FkZCwgRG9udEVudW0sIDEpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05f
V0lUSE9VVF9UUkFOU0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmNsZWFyLCBzZXRQcm90b0Z1bmND
bGVhciwgRG9udEVudW0sIDApOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFO
U0lUSU9OKHZtLnByb3BlcnR5TmFtZXMtPmRlbGV0ZUtleXdvcmQsIHNldFByb3RvRnVuY0RlbGV0
ZSwgRG9udEVudW0sIDEpOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPmhhcywgc2V0UHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSk7
CisgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9OKHZt
LnByb3BlcnR5TmFtZXMtPmhhcywgc2V0UHJvdG9GdW5jSGFzLCBEb250RW51bSwgMSwgSlNTZXRI
YXNJbnRyaW5zaWMpOwogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT05fV0lUSE9VVF9UUkFOU0lUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPmJ1aWx0aW5OYW1lcygpLmVudHJpZXNQdWJsaWNOYW1lKCksIHNl
dFByb3RvRnVuY0VudHJpZXMsIERvbnRFbnVtLCAwKTsKIAogICAgIEpTRnVuY3Rpb24qIHZhbHVl
cyA9IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCAwLCB2bS5wcm9wZXJ0eU5h
bWVzLT5idWlsdGluTmFtZXMoKS52YWx1ZXNQdWJsaWNOYW1lKCkuc3RyaW5nKCksIHNldFByb3Rv
RnVuY1ZhbHVlcyk7CkBAIC04NSwxNiArODUsMTQgQEAgQUxXQVlTX0lOTElORSBzdGF0aWMgSlNT
ZXQqIGdldFNldChDYWxsRgogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBhdXRv
IHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKLSAgICBpZiAoIXRoaXNWYWx1ZS5p
c09iamVjdCgpKSB7CisgICAgaWYgKFVOTElLRUxZKCF0aGlzVmFsdWUuaXNDZWxsKCkpKSB7CiAg
ICAgICAgIHRocm93Vk1FcnJvcihjYWxsRnJhbWUsIHNjb3BlLCBjcmVhdGVOb3RBbk9iamVjdEVy
cm9yKGNhbGxGcmFtZSwgdGhpc1ZhbHVlKSk7CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAg
IH0KLSAgICBKU1NldCogc2V0ID0ganNEeW5hbWljQ2FzdDxKU1NldCo+KHRoaXNWYWx1ZSk7Ci0g
ICAgaWYgKCFzZXQpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBzY29wZSwg
QVNDSUlMaXRlcmFsKCJTZXQgb3BlcmF0aW9uIGNhbGxlZCBvbiBub24tU2V0IG9iamVjdCIpKTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHJldHVybiBzZXQ7CisgICAgaWYg
KExJS0VMWSh0aGlzVmFsdWUuYXNDZWxsKCktPnR5cGUoKSA9PSBKU1NldFR5cGUpKQorICAgICAg
ICByZXR1cm4ganNDYXN0PEpTU2V0Kj4odGhpc1ZhbHVlKTsKKyAgICB0aHJvd1R5cGVFcnJvcihj
YWxsRnJhbWUsIHNjb3BlLCBBU0NJSUxpdGVyYWwoIlNldCBvcGVyYXRpb24gY2FsbGVkIG9uIG5v
bi1TZXQgb2JqZWN0IikpOworICAgIHJldHVybiBudWxscHRyOwogfQogCiBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIHNldFByb3RvRnVuY0FkZChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAg
LTE4NCw3ICsxODIsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHByaXZhdGVGdW5j
CiAgICAgICAgIHJlc3VsdEFycmF5LT5wdXREaXJlY3RJbmRleChleGVjLCAwLCByZXN1bHQpOwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpOwogICAgIH0K
LSAgICBpdGVyYXRvci0+ZmluaXNoKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4odHJ1ZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAKICNpbmNsdWRlICJKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKICNp
bmNsdWRlICJKU0xvY2suaCIKKyNpbmNsdWRlICJKU01hcC5oIgogI2luY2x1ZGUgIkpTUHJvbWlz
ZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmgiCiAjaW5j
bHVkZSAiSlNUZW1wbGF0ZVJlZ2lzdHJ5S2V5LmgiCkBAIC0yNTMsNiArMjU0LDEwIEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICNpZiBFTkFCTEUoV0VCQVNTRU1C
TFkpCiAgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2Vu
ZGlmCisgICAgaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBCdWNr
ZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpKSk7CisgICAgaGFzaE1hcEJ1Y2tldE1hcFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhhc2hNYXBC
dWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXlWYWx1ZT46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICBoYXNoTWFwSW1wbFNldFN0cnVjdHVyZS5zZXQoKnRoaXMsIEhh
c2hNYXBJbXBsPEhhc2hNYXBCdWNrZXQ8SGFzaE1hcEJ1Y2tldERhdGFLZXk+Pjo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGhhc2hNYXBJbXBsTWFwU3RydWN0dXJl
LnNldCgqdGhpcywgSGFzaE1hcEltcGw8SGFzaE1hcEJ1Y2tldDxIYXNoTWFwQnVja2V0RGF0YUtl
eVZhbHVlPj46OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKIAogICAgIGl0
ZXJhdGlvblRlcm1pbmF0b3Iuc2V0KCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGUoKnRoaXMs
IEpTRmluYWxPYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCksIDEpKSk7
CiAgICAgbmF0aXZlU3RkRnVuY3Rpb25DZWxsU3RydWN0dXJlLnNldCgqdGhpcywgTmF0aXZlU3Rk
RnVuY3Rpb25DZWxsOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIwNTUxNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw2ICsz
MzQsMTAgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7Cisg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gaGFzaE1hcEJ1Y2tldFNldFN0cnVjdHVyZTsKKyAgICBTdHJv
bmc8U3RydWN0dXJlPiBoYXNoTWFwQnVja2V0TWFwU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGhhc2hNYXBJbXBsU2V0U3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGhh
c2hNYXBJbXBsTWFwU3RydWN0dXJlOwogCiAgICAgU3Ryb25nPEpTQ2VsbD4gaXRlcmF0aW9uVGVy
bWluYXRvcjsKICAgICBTdHJvbmc8SlNDZWxsPiBlbXB0eVByb3BlcnR5TmFtZUVudW1lcmF0b3I7
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNi0wOS0wNiAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIEpTTWFwIGFuZCBKU1NldCBmYXN0ZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDk4OQorCisg
ICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgIEkgbWFkZSBzX2ZsYWdD
b3VudCBwdWJsaWMgaW4gU3RyaW5nSW1wbCBzaW5jZSBKU0MncyBKSVRzIG5vdyB1c2UgdGhpcyBm
aWVsZC4KKworICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKwogMjAxNi0wOS0wNiAg
Q29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjIwNTUwNC4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nSW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5o
CShyZXZpc2lvbiAyMDU1MTQpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAko
d29ya2luZyBjb3B5KQpAQCAtMTQ4LDcgKzE0OCw5IEBAIHByaXZhdGU6CiAgICAgfTsKIAogICAg
IC8vIFRoZSBib3R0b20gNiBiaXRzIGluIHRoZSBoYXNoIGFyZSBmbGFncy4KK3B1YmxpYzoKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19mbGFnQ291bnQgPSA2OworcHJpdmF0ZToKICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgc19mbGFnTWFzayA9ICgxdSA8PCBzX2ZsYWdDb3VudCkgLSAx
OwogICAgIENPTVBJTEVfQVNTRVJUKHNfZmxhZ0NvdW50IDw9IFN0cmluZ0hhc2hlcjo6ZmxhZ0Nv
dW50LCBTdHJpbmdIYXNoZXJfcmVzZXJ2ZXNfZW5vdWdoX2JpdHNfZm9yX1N0cmluZ0ltcGxfZmxh
Z3MpOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2ZsYWdTdHJpbmdLaW5kQ291bnQgPSA0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTYtMDktMDYgIFNhYW0g
QmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgTWFrZSBKU01hcCBhbmQgSlNT
ZXQgZmFzdGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjA5ODkKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICAq
IEZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSGFzaE1hcEltcGwuaDogQWRkZWQuCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9NYXBCYXNlLmg6IEFkZGVkLgorICAgICAgICAq
IGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDbG9uZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZURl
c2VyaWFsaXplcjo6ZGVzZXJpYWxpemUpOgorCiAyMDE2LTA5LTA2ICBGdWppaSBIaXJvbm9yaSAg
PEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV0gRGVjb3VwbGUgZ2Vu
ZXJhdGluZyBiaW5kaW5ncyBvZiBXZWJDb3JlIGFuZCBXZWJDb3JlVGVzdFN1cHBvcnQKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvSGFzaE1hcEltcGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy9ydW50aW1lL0hh
c2hNYXBJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVh
ZGVycy9ydW50aW1lL0hhc2hNYXBJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBA
CisjaWZuZGVmIFdlYkNvcmVfRldEX0hhc2hNYXBJbXBsX2gKKyNkZWZpbmUgV2ViQ29yZV9GV0Rf
SGFzaE1hcEltcGxfaAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0hhc2hNYXBJbXBsLmg+Cisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1bnRpbWUvTWFw
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3J1
bnRpbWUvTWFwQmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGlu
Z0hlYWRlcnMvcnVudGltZS9NYXBCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0IEBA
CisjaWZuZGVmIFdlYkNvcmVfRldEX01hcEJhc2VfaAorI2RlZmluZSBXZWJDb3JlX0ZXRF9NYXBC
YXNlX2gKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NYXBCYXNlLmg+CisjZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmNwcAkocmV2aXNpb24gMjA1NTE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2OCw3ICsxMzY4
LDcgQEAgU2VyaWFsaXphdGlvblJldHVybkNvZGUgQ2xvbmVTZXJpYWxpemVyOgogICAgICAgICAg
ICAgY2FzZSBNYXBEYXRhU3RhcnRWaXNpdEVudHJ5OiB7CiAgICAgICAgICAgICAgICAgSlNNYXBJ
dGVyYXRvciogaXRlcmF0b3IgPSBtYXBJdGVyYXRvclN0YWNrLmxhc3QoKTsKICAgICAgICAgICAg
ICAgICBKU1ZhbHVlIGtleSwgdmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRvci0+
bmV4dEtleVZhbHVlKGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpdGVyYXRv
ci0+bmV4dEtleVZhbHVlKG1fZXhlYywga2V5LCB2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgbWFwSXRlcmF0b3JTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBpbnB1dE9iamVjdFN0YWNrLmxhc3QoKTsKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKGpzRHluYW1pY0Nhc3Q8SlNNYXAqPihvYmplY3QpKTsKQEAgLTI1NDUsNyAr
MjU0NSw5IEBAIERlc2VyaWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAg
ICAgbWFwT2JqZWN0U3RhcnRTdGF0ZTogewogICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0
YWNrLnNpemUoKSA+IG1heGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV9wYWlyKEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAg
ICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxP
YmplY3QtPm1hcFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIEpTTWFwKiBtYXAgPSBKU01hcDo6
Y3JlYXRlKG1fZXhlYywgbV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+bWFwU3RydWN0dXJl
KCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQor
ICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVu
ZChtYXApOwogICAgICAgICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKG1hcCk7CiAgICAg
ICAgICAgICBtYXBTdGFjay5hcHBlbmQobWFwKTsKQEAgLTI1NzQsNyArMjU3Niw5IEBAIERlc2Vy
aWFsaXphdGlvblJlc3VsdCBDbG9uZURlc2VyaWFsaXplcjoKICAgICAgICAgc2V0T2JqZWN0U3Rh
cnRTdGF0ZTogewogICAgICAgICAgICAgaWYgKG91dHB1dE9iamVjdFN0YWNrLnNpemUoKSA+IG1h
eGltdW1GaWx0ZXJSZWN1cnNpb24pCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKEpTVmFsdWUoKSwgU3RhY2tPdmVyZmxvd0Vycm9yKTsKLSAgICAgICAgICAgIEpTU2V0KiBz
ZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYy0+dm0oKSwgbV9nbG9iYWxPYmplY3QtPnNldFN0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgIEpTU2V0KiBzZXQgPSBKU1NldDo6Y3JlYXRlKG1fZXhlYywg
bV9leGVjLT52bSgpLCBtX2dsb2JhbE9iamVjdC0+c2V0U3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgaWYgKFVOTElLRUxZKG1fZXhlYy0+aGFkRXhjZXB0aW9uKCkpKQorICAgICAgICAgICAgICAg
IGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBtX2djQnVmZmVyLmFwcGVuZChzZXQpOwogICAgICAg
ICAgICAgb3V0cHV0T2JqZWN0U3RhY2suYXBwZW5kKHNldCk7CiAgICAgICAgICAgICBzZXRTdGFj
ay5hcHBlbmQoc2V0KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>